HTTP DDOS 공격의 종류
"어떻게 하면 서버를 괴롭게 할 수 있을까?"
*개행문자 : 0x0d0a
- \r (Carriage Return) : 0x0d
- \n (Line Feed) : 0x0a
프로그램 및 기능 > Windows 기능 켜기/끄기 telnet 설치하기
*http 헤더의 각 항목 뒤에는 0x0d0a가 들어감 (줄 바꿈)
http 요청이 끝나는 부분에 0x0d0a가 한번 더 들어감 (0x0d0a0x0d0a)
//실습
cmd 켜서 telnet ${IP} 80 로 접속하기
telnet ${IP} 80
OPTIONS / http/1.1
host: ${IP}
한번 치면 서버가 기다린다. (아직 HTTP Request가 끝나지 않았다고 인식.)
엔터 두번 입력하면 http request가 종료되어서 서버로부터 응답이 온다.
*Slowloris Attack
- Http 요청 끝부분에 있는 0x0d0a0d0a를 제거 하고 보내는 것. (혹은 0x0d0a를 한번만 붙여서 보낸다)
--> 서버는 http 요청이 아직 끝나지 않았다고 인식하고 계속 대기하는 상태가 된다.
--> 서버가 세션을 물고 계속 기다리게 된다.. 서버의 자원 소모가 극심해진다. 결국엔 느려진다.
----> 실제로 많이 들어오는 공격. 실제로 당하면 엄청 짜증난다고 함. TimeOut으로 막는 수밖에...
*비밀번호 공격 방법*
1. Social Engineering (사회공학) : 컴퓨터가 아닌 사람의 취약한 보안의식을 공략하는 방법
-- 예 : 피싱, 파밍.... 주의부족(개인정보를 활용한 비밀번호, 동일한 비밀번호 재사용)
-- 대응방법 : 보안 의식교육(1년에 일정 시간씩 의무 교육)
2. Brute Force Attack (무차별 대입법, 전수 대입법) : 가능한 경우의수를 모두 대입하는 방법
-- 예 : 계좌 비밀번호 0000~9999 [보완 통제로 3회 까지만 허용], 알파벳 4자리 : aaaa~ZZZZ
-- 대응방법1 : 길고 복잡한 패스워드를 사용해야 한다. --예: 13자리이상, 대/소/숫/특 섞어서 사용
---- https://howsecureismypassword.net - 비밀번호 복잡도를 테스트 할 수 있다.
-- 대응방법2 : 횟수제한, 잠금시간 설정 (5회 틀리면 30분 동안 잠금 등..)
-- 대응방법3 : Captcha, Image Captcha
3. Dictionary Attack : 자주 사용하는 패스워드를 모아 놓은 파일을 Dictionary라고 한다.
구글에서 'password dictionary'을 검색 해보자.
-- 대응방법 : 사전에 나오지 않을 패스워드 사용
4. Keyloggin
- 키로깅 툴을 만들거나 다운받아서 목표물의 Device에 몰래 설치 해놓음
-- 대응방법 : 가상 키보드를 사용하여 마우스로 클릭하게 한다, 키로거 방지도구 사용
5. Sniffing
- ARP Spoofing, MITM, SSL Strip... 등 (Sniffing을 위한 사전 준비)
-- 대응방법 : 암호화 (SSL/TLS, VPN(IPSec), SSH, sFTP 등등..)
-- 하지만 SSL Strip 방법으로 키교환부터 Sniffing하게되면 막기가 어렵다.
* 아무리 뛰어난 보안 솔루션을 사용해도, 취약한 패스워드를 사용하면 소용이가 없다.
* Hash Function (해쉬 함수) :
- 원문(텍스트 || 파일 || 비밀번호)을 해쉬함수에 넣으면 해쉬값이 나오는 원리가 있다.
- 해쉬함수의 종류 : MD5(128bit), SHA-1(160bit), SHA-256(256bit)등
1) 고정길이 출력 : 원문의 길이와 관계없이 항상 일정한 크기로 출력된다.
-- MD5의 해쉬값은 어떤 크기의 이미지를 넣던 항상 결과가 128bit가 됩니다. SW패키지도 마찬가지에요!
2) 역연산 불가 : 해쉬함수와 해쉬값을 알아도 원문을 만들 수 없다. (일방향 함수의 특징)
3) 충돌 방지 : 충돌? : 원문이 다른데 같은 해쉬값을 가지는것
-- MD5의 해쉬값이 충돌될 가능성 : 1/(2의 128승) 2000년 이후 사용하지 않음,
-- SHA-1의 해쉬값이 충돌될 가능성 : 1/(2의 160승)으로 2008년 이후 안정성에 문제가 있는것으로 사용 중지를 권장하고 있다. / ISMS-P에서 지적 사례. Password를 SHA-1알고리즘을 사용하면 인정 안해줌.
-- 확률은 거의 0인데, 컴퓨터의 발전으로 더이상 안전하지 않다.
-- SHA-256 : 최근 사용하는 해쉬 알고리즘. 공인인증서(2012년부터~), 비트코인,
---- BirthDay Attack : 23명이 모이면 생일이 같을 가능성이 50%
---- 원래는 계산이 불가능하지만, 이점을 악용해서 DB를 생성할 가능성이 있다. - 그래서 안전하지 않다는것.
* Salt : 해쉬값이 매번 동일한 값이 나오는 문제를 방지하기 위해서 사용
- 원문에 salt를 붙인 후에 해쉬값을 계산한다.
- /etc/shadow 파일에서는 HASH 알고리즘을 아래와 같이 표시한다.
$해쉬ID $Salt $Hash
- Hash ID 의미
- $1 : MD5
- $2 /$2a / $2y : BlowFish
- $5 : SHA-256
- $6 : SHA-512
* Rainbow Table
Salt 때문에 Hash값이 달라지므로, Salt를 넣어서 Hash값을 계산한 테이블. Salt가 없으면 그!냥!아!주!취약함.
* 당연하지만, 고정된 Salt값을 사용하면 취약합니다.
* 취약한 암호 알고리즘
- 대칭키 : RC4, DES, 3DES - 보통 알고리즘 문제
- 공개키 : RSA 1024bit이하 , ECC160bit - 보통 키길이 짧아서 안정성에 문제가 있다.
*DROWN, PUDDLE Attack
오래된 암호화 방식으로 키교환을 할때 발생되는 취약점이다.[SSL2.0, SSL3.0등에서 발견되는 취약점]
- 일부러 서버에 낮은 암호화 방식을 요청한다 - sniffing의 문제가 발생 할 수 있다.
*Cookie
- Text형
- IP, 지역(국가), 언어(kr), 모니터크기, 웹브라우저의 종류, 접속한 시간, 어디서 접속했는지 여부... 등등의 개인정보이다.
- GDPR, 개인정보보호법 등에서 개인정보로 분류한다.
- Client의 PC에 저장되며 사이트당 200개 이하다.
- 크롬이라면 chrome://settings/siteData 에서 확인 가능하다.
- Base64로 인코딩 하면 ISMS-P 결함이 되어 지적사항이다.
*Session
- Object형
- 서버에저장되며, 서버에서 저장가능한 개수만큼 저장 가능하다.
* 하드코딩된 Password
mysql_connect()를 구글링해보면.....(충공깽)
* 공개키 암호화 방식은 키길이가 늘어나면 안전해진다.
하지만 키길이가 길어지면 CPU연산이 늘어나고.. 서버에 부하가 심해진다.
--예를들어 4년전 기차회사에서 설 예매기간 사이버 보안 해제 문제 발생.
접속 폭주에 따른 부하를 줄이려고 구간 암호화 해지... --> 암호화 하면 구간에 4~6배 부하가 생기기 때문
*
Findbugs, PMD, FindSecuritybugs 등..
'Today I learned' 카테고리의 다른 글
20191217 보안 SW 개발 세미나 6일차 (0) | 2019.12.28 |
---|---|
20191218 보안 SW 개발 세미나 7일차 (0) | 2019.12.18 |
20191211 보안 SW 개발 세미나 3일차 (0) | 2019.12.11 |
20191210 보안 SW 개발 세미나 2일차 (0) | 2019.12.10 |
20191209 보안 SW 개발 세미나 1일차 (0) | 2019.12.09 |
댓글