Port Scanning 기법 - SYN scanning

2012. 7. 7. 21:25Hacking/Network

반응형

Half-Open Scanning

SYN패킷을 이용한 포트 스 캐닝 기법이다.

앞서 명기한 Connect 스캔에 비하여 신뢰성은 조금 떨어지지만 진단대상의 로그를 남기지 않을 수 있다는 장점이 있다.

해당 스캐닝 기법은 동일하게 SYN 패킷을 보내 고 SYN+ACK패킷을 받음으로써 포트의 개방 여부를 파악한다.

하지만 SYN+ACK 패킷을 받은후 에 RST 패킷을 보내어 세션을 종료하는 점이 Connect 스캔과 다른 점이라 할 수 있다.




sS_scan_open


스캐닝 기법중 Half-Open Scanning 을 구현하기 위해서는 RAW Socke을 사용하는 소켓 프로그래밍 기법이 필요하다.


 기존의 TCP 세션 확립은 Bind( ), Connect( ), Listen( ), Accept( ) 등의 함수를 활용한 소켓 프로그래밍 기법을 사용하여 프로그램 되고 수행되어 왔다.

 하지만 위의 방법을 사용할 경우 무조건 적으로 3-WAY Handshake 방식이 성립되어 SYN 패킷만을 보내는 Half-Open Scanning 기법 은 사용이 불가능하게 된다.

 위와 같은 문제를 해결하기 위해서는 소켓 프로 그래밍 기법중 RAW Socket으로 알려져 있는 방법이 필요하게 된다.

 RAW Socket 프로그래밍 방식은 root 권한이 필요하지만, 사용자 자신이 Kernel 영역에서 패킷을 생성, 조작, 전송하는 것을 가능하게 해준다.


 하지만 RAW Socket을 사용하기 위해서는 TCP / IP 헤더는 물론 네트워크 패킷의 에러나 데이터 손실을 검사하는 Checksum 알고리즘까지 사용자가 직접적으로 구현을 해 주어야 한다.

 RAW Socket으로 전달되는 패킷은 IP 헤더가 포함된 전체 IP 데이터그램으로써 Application 계층으로 전달이 된다. 

 RAW Socket에 대한 출력은 목적지 IP Address를 지정한 후 sendto / sendmsg 함수중 하나를 선택하여 사용한다.


Checksum 알고리즘 TCP헤더의 체크섬은 사용자가 임의로 선언한

Pseudo 헤더와 TCP헤더의 내용을 작성하여 작성 된 헤더를 2바이트 단위로 분할하여 모두 합한 값의 1의 보수를 취하는 방법으로 구하게 된다.

 이때 2의 보수가 아닌1의 보수를 사용하는 이유는 2의 보수와 비교하여 오류를 검출하는 효과가 우수하고, 빅-엔디안과 리틀-엔디안에 상관없이 모두 같은 알고리즘을 사용하여 체크섬 계산이 가능하기 때문이다.

 해당 체크섬은 계산을 통하여 그 값을 구함으로써 RAW Socket을 사용하여 임의로 생성된 패킷이라 할지라도 오류 검출에서 정상적인 값을 반환하게 되어 정상적인 통신이 가능하게 된다.

반응형