오늘은
TCP 헤더를 이용한 공격 기법을 확인해 볼것이다.
TCP 공격기법으로는
1) TCP Scanning
2) TCP를 이용한 DDos 공격이 있다.

오늘은 TCP Scanning 기법을 확인 해 볼 것이다.

1) TCP Scanning
 - Flag ( SYN, FIN, RST, ACK, ... )
 - 열려있는 포트와 닫혀있는 포트의 응답이 다르다.
 - 3-way handshake를 이용한다.

- FULL-Scan
 : 3-way handshake과정을 모두 거친다.
 : 세션을 맺어보는 것이다.
 : 맺어지면 열려있는 것이고 연결이 안되면 닫혀있는 것이다.
 : TCP 연결 흔적이 남는다. 연결되었다는 기록이 남는다.



(FULL Scan 코드)





(포트가 열려있을 때 모습)




위 처럼 포트가 열려있으면 아무 반응이 없다.

하지만 포트가 닫혀있으면 연결이 안되므로



(135번 포트 스캔)




(오류 메세지)




연결 할 수 없다고 뜬다.

이 처럼 한번 TCP 연결을 해보면서 포트가 열려있는지 확인하는 것을
TCP 스캔이라고 한다.




(Half Scan 코드)




(포트가 열려있을 경우)




포트가 열려있을 경우 위 처럼 ACK SYN 패킷이 돌아온다.

닫혀있는 경우 RST 패킷이 돌아온다.




(닫혀있는 경우)




포트가 닫혀있는 경우는 위와 같이 RST 패킷이 돌아온다.
즉, 연결이 안된다.

- HALF-Scan( Stealth Scan )
 : 3-way handshake를 이용하지만 완벽하게 연결하지 않는다.
 SYN Scan( 열려있는 포트에 대한 스캐닝 기법 )
 (1) 서버에 동기화 요청 (SYN)
 (2) 서버에서는 SYN-ACK로 응답(Listening이라면)
     서버에서는 RST 패킷을 보낸다. (닫혀있다면)
 (3) ACK로 응답을 하지 않는다.

SYN-ACK 패킷이 오면 우리는 그에 따른 응답을 안해주고 연결을 여기서 끊어준다.
그렇기 때문에 Half Scan이라고 한다.

서버에 로그 흔적이 남지 않는다. (연결이 이루어지지 않았기 때문에)


 (닫혀있는 포트에 대한 스캐닝 기법)
 - FIN SCAN, NULL SCAN, X-MAS SCAN,...
 -> 이녀석들은 반대다.
 -> 닫혀있으면 반응하고, 열려있으면 반응을 안한다.
 => 이것이 표준이지만, 표준과 다른 경우도 많다.
 - X-MAS 는 모든 플래그를 세팅해둔다.


 - SYN-ACK 스캔 ( 호스트 스캔 )  (유용한 스캔) (포트와는 상관없다.)
 : ping보다 성능이 더 좋다. (방화벽에서 막지 못한다.)
 : 포트가 열려있는지 닫혀있는지 관계없이 호스트가 살아있다면 응답이온다.
 : 죽어있다면 응답이 오지 않는다.
 : 방화벽을 다 뚫을 수 있고 살아있는 시스템을 다 체크할 수 있는 좋은 스캔이다.
 : 해당 서버에 기록이 남지 않는다.




(SYN-ACK 스캔 모습)





오늘은 전송계층인 L4의 취약점을 분석해 보겠다.

Layer 4에는 TCP와 UDP가 있다.
오늘은 L4 중에서 UDP의 취약점을 분석해볼 것이다.

* UDP헤더를 이용한 공격 기법
1) 스캐닝
2) UDP Flooding

1. 스캐닝
- 타겟의 정보를 수집하는 방법
- 어떠한 서비스가 열려있는지 ,포트가 열려있는지 확인하는 방법
- 내 컴퓨터에서 netstat 치면 나오는 정보를 알아내는 방법이다.
- 다른 host에서 netstat의 정보를 확인하려는 방법이다.
- 그 중 UDP 스캐닝 기법이 있다. (UDP 통신 방법을 이용해서)
- 해당 포트가 열려있을 때와 닫혀있을 때가 돌아오는 반응이 다르다.
 -> 이걸 이용해서 스캐닝을 하는 방법이다.



(확인하려는 정보)



위의 화면을 확인해보려는 것이다. cmd 창에서 netstat 명령어로 확인 할 수 있다.
하지만 상대 host의 정보는 쉽게 확인할 수 없으므로
스캐닝 이란 작업을 한다.



(UDP 스캔 코드)



위는 윈도우 소켓을 이용해서 UDP 패킷을 만들고 전송하는 코드이다.
여기서 원하는 포트번호 50000번을 지정해서 보냈다.
(옆 자리 사람이 서버를 열어둔 상태이다.)



(아무 응답이 없다.)



-> 이렇게 아무 응답이 없다면 포트가 열려있다는 것이다.
그렇다면 닫혀있다면 어떤 반응일까?



(포트가 닫혀있을 때)



포트가 닫혀있을 때는 위와 같이 ICMP 에러 패킷이 전송된다.
우리는 이로써 포트가 닫혀있는 걸 알 수 있다.

정리하면
포트가 열려있으면 -> 아무 응답 없다.
포트가 닫혀있으면 -> ICMP 에러 패킷이 온다.

- 프로토콜에 따라 다르겠지만, 데이터를 서비스에 맞게 설정한 경우 응답이 올 수 있다.
 -> 포트가 닫혀있는 경우 icmp error 메세지로 응답이 온다.
 - destination unreachable 로 응답이 온다.
 - 확인하고자 하는 host의 방화벽이 켜져있으면 icmp응답이 오지 않는다.
 - 그래서 방화벽을 끄고 실험했다. 여기서 알 수 있는 것은
   방화벽으로 UDP 스캐닝을 막을 수 있다는 것이다.
 - 우리는 패킷 수로 체크를 해서 트래픽 수가 많아지면 정확도가 떨어졌다.
 - 스캔 툴 : nmap (유명한 대표적인 스캐닝 도구)


* 주의. 스캐닝 아무대나 하면 안된다. (엄연한 불법이다.)

2. UDP헤더를 이용한 DDos 공격 기법

- UDP Flooding 기법 : 대량의 UDP 패킷을 발생시키는 공격기법
  -> 공격의 목적이 특정 타겟이 아니라 타겟 네트워크의 대역폭을 대상으로 하는 공격기법이다.
  -> 네트워크 전체를 마비시키는 목적이다.
  -> 포트가 닫혀있으면 에러메세지를 보낸다.
  -> 출발지 ip 주소를 스푸핑한다. (해당 네트워크 안에 있는 IP주소로)
  -> 해당 네트워크 내에서 에러메세지가 돌아다닌다.
  -> 이 양이 대량이면 그 해당 네트워크의 대역폭을 감소시킬 수 있다.
  -> 해결방법은 ICMP 패킷을 안쓰는 것이다. (그렇기 때문에 요즘 ICMP를 안쓴다.)
     ( 아까 확인했듯이 방화벽이 켜져있으면 ICMP 에러메세지를 만들지 안는다.)
  -> 윈도우 소켓으로는 IP 스푸핑이 안된다.
  -> L2까지 보내던 방법으로 보내서 확인 할 수 있다. (sleep()을 주어서 조금 지연시켜야한다.)
     그렇지 않으면 와이어샤크가 뻗어버린다.

확인해 보겠다.




(UDP Flooding 코드)



코드는 위와 같다.

내가 UDP Flooding 공격을 받은 상황은 다음과 같다.
위 코드의 화면은 아니다.





다른 사람이 나의 컴퓨터를 이용해 167번 컴퓨터를 공격하고 있는 모습이다.
공격자는 공격 대상 host의 ip주소로 출발 ip를 스푸핑 해서
나에게 UDP 패킷을 보낸다.
그리고 나는 닫혀있으므로 공격 대상(피해자)에게 대량의 ICMP 패킷을 보내는 것이다.

위 화면은 sleep 을 걸어두어서 확인 할 수 있는 정도의 양이 나왔다.
실제로 sleep을 안걸었을 때 와이어샤크가 동작을 멈추었다.




+ Recent posts