2013년 보안 교육을 들으면서 강사들의 언급으로 알게된 파이썬이라는 랭귀지.

2014년 증권회사 보안팀 아는 분으로부터 또 한번 듣게 되어 어떤 언어인지 궁금해서 읽게된 책.


혹시나 이 글을 보는 본들을 위해 미리 말씀드리지만

아주 깊은 내용의 리뷰를 포스팅하는 것은 아닙니다. 그저 개발을 몇년간 해봤던 경험자로서, 보안에 무지한 보안 초보자로서 입장에서 알고 싶어 책을 읽었고 해킹의 사례를 통해 기업 보안 업무에 활용할 수 있는 무엇인지(공격을 알아야 방어도 할 수 있기에) 알고 싶었을 뿐, 책의 전체 내용을 요약, 리뷰도 아니고 저의 잘못된 지식/정보일 수 있습니다.





1. 파이썬 라이브러리의 상세 정보

http://docs.python.org/2/library/


2. 유닉스 패스워드 크래커 예제

- 유닉스 패스워드를 저장할 때 내부적으로 crypt() 해시 라이브러리를 사용

- 이 함수에 패스워드와 salt 를 전달하면 된다 


회사내 유닉스 서버 계정의 패스워드 규칙 적정성을 검사하기 위해서

1. 회사내 유닉스 서버의 /etc/shadow 파일의 해시화된 패스워드를 수집하고

2. 미리 알고 있는 salt 값과 딕셔너리 파일 정보로

3. 패스워드 크래커 프로그램을 만들어서

4. 딕셔너리내 단어와 일치하는 패스워드를 - 간단한 조합의 패스워드 - 추출하는 

   방법을 하는 것은 비효율적일까?


서버 담당자들을 믿고 패스워드 규칙만 전달하는 것만이 맞을까?

아님 보안 담당자가 root 계정으로 전체 서버를 일일히 검사하는게 맞을까?


3. 포트 스캐너 예제

- 정보수집은 모든 사이버 공격의 첫번째 단계

- 공격대상에서는 웹 서버를 TCP 포트 80번에서, 메일 서버를 TCP 포트 25번에서 그리고 파일 서버를 

   TCP 포트 21번에서 사용하고 있을 가능성이 높다. 이러한 서비스들 중 어느 하나에 연결하기 위해서 

   공격자는 IP 주소와 해당 서비스에서 사용하고 있는 TCP 포트를 반드시 알아야 한다.

- 파이썬 nmap 자료 : http://xael.org/norman/python/python-nmap/

- 여러 종류의 포트 스캔 방법    

① TCP SYN SCAN

- 하프 오픈(half-open scan)이라고도 알려져 있는데, 이 종류의 스캔은 SYN 패킷으로 TCP

   연결을 시작하고 응답을 기다린다. RST 패킷은 포트가 닫혀있는 것을 의미하고, SYN/ACK 는

   열려있는 것을 의미한다.


② TCP NULL SCAN

- 널 스캔은 TCP 플래그 헤더를 0(ZERO)으로 설정한다. 만약 RST를 받으면 포트가 닫혀있는 것

   을 의미한다.


③ TCP FIN SCAN

- TCP FIN 스캔은 FIN을 전송하여 현재 활성화되어 있는 TCP 연결을 종료시키려고 한다. 그리고 

   종료되기를 기다린다. 만약 RST 를 받으면 포트가 닫혀있는 것이다.


④ TCP XMAS SCAN 

- XMAS 스캔은 PSH, FIN 그리고 URG TCP 플래그를 활성화한다 만약 RST를 받으면 포트가 닫혀

   있는 것이다.


관련 규정에 따라 정기적으로 외부 위탁업체를 통해 취약점 점검을 해서 미사용 포트의 오픈 여부를 점검한다.

보안팀 자체적으로 해서 외부 점검에만 의존하지 말고, 보안 시스템에 사용되는 서버는 정작 포트 스캔을 하지 않는 경우가 있어 보안사고가 발생하는 경우를 미리 차단할 수 있지 않을까?


1. 전체 서버 호스트명과 IP 리스트과

2. 해당 서버에서 사용중인 서비스 포트를 예외로 해서

3. 자동적으로 정기적으로 포트 스캔할 수 있는 내부 서버 스캐너를 만들어서 사용하는 

   건 어떨까?


4. 익명 FTP 스캐너

- 파일 전송 프로토콜(FTP : File Transfer Protocol) 서비스는 TCP 기반의 네트워크에서 사용자들이 서로

   파일을 전송할 수 있도록 해준다

- 일부 사이트에서는 익명으로 인증을 할 수 있는 기능을 제공한다.

- 이 경우 사용자는 사용자 이름에 "anonymous" 라고 입력하고 패스워드 대신에 이메일 주소를 입력한다.

- 많은 사이트가 정당한 이유로 익명 FTP 접근을 허용하고 있다. 예로 소프트웨어 업데이트를 좀 더 원활하

   게 하기 위한 용도가 있다.

- 또한, 홈페이지가 조작된 해킹 사고는 결국 공격자가 악성코드가 담긴 웹페이지를 대상 서버로 업로드

   했기 때문에 발생한 것이다.


회사내 대 고객 서비스를 위해 FTP 서버를 운영하는 곳이 있다. 

그리고 FTP 서버에서 웹 서비스도 한다면 공격자에 의해 변조된 웹 페이지가 업로드되어 이용자들이 악성코드에 감염될 수 있다.


1. 회사내 FTP 서비스 제공 서버 또는 포트 스캐너에서 21번 포트를 오픈한 서버 리스트에서

2. 회사내 서버 계정과 패스워드 조합 리스트를 통해 접속 확인

3. FTP 서버에 있는 인증정보로 서버에서 웹 접속을 제공하는지 확인하기 이해 FTP 서버의

   디렉토리에 컨텐츠의 목록을 가져오고

4. 그 목록에서 디폴트 웹 페이지를 검색 (.php, .htm, .asp 등)

5. 악의적인 서버로 방문자가 리다이렉트 되도록 악성코드를 심기 위해 iframe 삽입을 하므로

   웹페이지내에 iframe 있는지 검사하여 정상적인 것인지 점검


* FTP 로 파일을 업로드 코딩할 때 "STOR" 을 사용한다

  해당 명령어가 로그에 남는지 모니터링하는 것도 참고할만하지 않을까?


5. TTL 필드 

- IP 주소의 TTL(time-to-live) 필드는 패킷이 최종 목적지에 도착하기 전까지 얼마나 많은 홉(hop)을 사용

   할 수 있는지 결정하고, 패킷이 라우팅 기기를 지날 때마다 라우터는 TTL 필드의 값을 하나 감소시킨다.

- 만약 8.8.8.8 이라는 주소에 TTL 값 64를 가지고 ping 을 전송했는데 돌아온 값을 보니 TTL 의 값이 53

   이었다면 해당 패킷이 11개의 라우팅 기기를 거친 것이다.

- 리눅스/유닉스 계열의 시스템은 보통 TTL의 초기 값을 64로 설정하고 시작

- 윈도우 기반의 시스템들은 128 로 설정


6. TCP 세션 하이재킹

- 순서

① 서버가 신뢰하는 컴퓨터를 찾고

② 신뢰하는 서버를 "침묵"시키고

- TCP 목적지 포트를 513 으로 고정하고

- TCP 소스 포트의 숫자를 증가시키면서 IP 패킷 생성해서 전송

③ 서버로부터의 연결을 스푸핑하고

- 각 네트워크 연결을 추적하는데 사용하는 TCP 일련번호에는 무작위성이 없다

- A 사이트/서버에서 대상 서버로 여러 개의 SYN 패킷을 전송

- 대상 서버는 SYN 패킷을 전송 받은 다음에 TCP 일련번호와 함께 SYN-ACK 로 응답

- 각각의 SYN-ACK 는 일정한 값만큼 증가하는 것이 보임

④ TCP 3방향 핸드쉐이크와 ACK를 스푸핑

- 다음 ACK 을 예상되면 그 보다 1 작은 값인 SYN 패킷값을 전송해서 스푸핑


일반적인 보안 책에서 TCP 세션 하이재킹이 나오는데 개요로만 설명되어 있었지만 코딩으로 직접 예제를 볼 수 있어 이해에 다소 도움이 되었다


- IDS 공격하기

- 침입탐지시스템(IDS)은 IP 네트워크에 있는 패킷을 로깅하면서 실시간으로 트래픽을 분석할 수 있다.

- 시그니처에 해당하는 툴 이름이나 악성코드를 공격대상으로 패킷을 전송


IDS 뿐만 아니라 웹방화벽, Anit DDOS, IPS 등 시그니처 기반 시스템을 도입할 때 BMT 할 때 사용할 수 있을 거 같다.


7. 웹서버의 사용자 식별방법

① 웹 서버는 사용자를 식별하는 첫 번째 수단으로 요청의 IP 주소를 기록

② 웹 사이트는 브라우저의 user-agent 문자열로 사용자를 식별

- 커널정보, 브라우저 버전, 사용자에 대한 다른 정보도 포함

- 악의적으로 사용되면 해당 브라우저에 가장 적합한 공격코드를 식별하는 데 사용될 수 있다.

- 이 정보를 사용하여 NAT 을 사용하는 컴퓨터를 구분하는 데 사용하기도 한다.

③ 웹 사이트들은 브라우저의 쿠키를 사용하여 사용자를 식별하기도 한다.


기업내 홈페이지로 접속하는 이용자 브라우저의 user-agent 정보를 통해서 이전에 접속한 브라우저 버전과의 비교 또는 중국 등 악성 공격이 많은 지역에서 사용하는 브라우저 버전, 커널정보 등을 비교해서 이용자가 피싱, 해킹 피해자인지 판단하는데 도움이 되지 않을까?

피싱, 해킹 사고가 났을 때 브라우저 정보와 매핑을 하면 실마리가 잡히지는 않을까?



Posted by i kiss you
,