본문 바로가기
Today I learned

20191213 보안 SW 개발 세미나 4일차

by soheemon 2019. 12. 13.

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 등..

댓글