오늘은 스캔 공격을 할 것이다.
스캔 자체도 공격이므로
실제 사용시 처벌받는다. (그러므로 가상환경에서 혹은 자기 공유기 안에서만 하도록한다.!)
스캔은
보통 공격 전에 공격대상의 시스템을 확인 할 때 사용된다.

어느 포트가 열려있고, OS는 뭐를 쓰고있고 방화벽은 어떻게 있고 등등
스캔을 통해서 사전 정보를 입수한다.

스캔 공격을 하기 전에
피해자의 호스트에서 열수 있는 포트는 열기 위하여 아래와같이
서비스를 실행해준다.



(포트 개방)



그 후 공격자 호스트에서
nmap을 이용하여 스캔해준다.



(스캔)



스캔 결과를 보면 열려있는 포트 번호가 주룩 나와있다.

어떤 식으로 스캔을 하는 걸까?
피해자의 호스트에서 와이어샤크로 패킷을 분석했다.



(패킷 분석)



패킷을 보면 SYN 패킷과 RST 패킷이 잔뜩 보인다.

nmap은 기본적으로 다른 설정을 안해주면 TCP Half Scan을 한다.
스텔스 스캔이라고도 하는데
SYN 패킷을 걸고 응답이 ACK로 오면 RST로 끊어주고
응답이 RST로 오면 닫혀있다는 것을 아는 것이다.



(패킷 분석)



패킷을 보면 SYN 패켓에 대해 ACK 패킷이 오니까 바로 RST 패킷을 보내 끊어주었다.

이번엔 TCP Full Scan을 해보겠다.



(TCP Full Scan)




(패킷 화면)



패킷을 보면
연결을 다 해주는 것을 확인 할 수 있다.
이 때문에 흔적이 남는 단점이 있다.
원리는 Half Scan과 같다. 다만 RST를 보내지 않고 연결을 해준다는 것이 다르다.

이번엔 Fin 패킷을 보내는 Fin Scan을 해보겠다.
명령어는 -sF 이다.



(FIn Scan)




(패킷 화면)



패킷을 보면 FIN 패킷이 날라오는 것을 확인 할 수 있다.

FIN 패킷은 열려있으면 아무 응답이 없고, 닫혀있으면 RST가 오는 원리를 이용한다.

같은 원리인 크리스마스 Scan을 해보겠다.
명령어 -sX



(X-mas Scan)




(패킷 화면)



패킷을 보면 모든 Flag가 설정되있는 것을 볼 수 있다.

그 다음으로는 Null Scan이 있다.
Null 스캔도 Fin, X-mas Scan과 원리가 같다.
명령어는 -sN이다.



(NULL Scan)




(패킷 화면)



패킷을 보면 아무 Flag도 설정되있지 않아
<None>으로 표시되는 것을 확인 할 수 있다.

또 명령어 -O를 입력해주면
해당 시스템의 운영체제 정보를 확인 할 수 있다.



(-O 명령어)



조금 더 상세하게 운영체제 정보까지 파악 할 수 있다.

오늘은 공격전 상대의 정보를 파악하는데 필요한 스캔 공격을 알아보았다.



오늘은 전송계층인 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