어제 만들던 코드는 완성됬다.
(내가 만든건아니지만 결국)

어제 만들던 원리 그대로 이어 붙였다.



(패킷 필터 결과화면)




위 화면은 python sniffer.py -p arp -s 192.168.3.18 -d 192.168.167 로 실행시킨 것이다.

옵션에 맞게 정상적으로 출력되는 것을 확인 할 수 있다.

이제 스니퍼 프로그램을 만드는데 있어서
패킷덤프 프로그램도 우리가 보기 편하게 만들었고,
ARP spoofing 할 수 있는 프로그램도 만들었다.

상대방의 패킷을 보려면, 스니핑을 하려면 지금까지 만든거로는 조금 부족하다.
왜냐하면
상대가 스니핑 당하는 것을 알아차리기 때문이다.

우리가 포워딩을 안해주기 때문에 상대 호스트는 나에게 패킷을 전송하고 있다.
그리고 그 결과를 못받고 있는 상황이다.
그러기 때문에 통신이 끊기게 되고 피해자는 알아차리게 된다.
더군다나 통신이 안되기 때문에 스니핑 할 수 있는 자료도 RST 패킷 , SYN 패킷등 이런거 밖에 볼수 없다.



(SYN, RST 패킷밖에 안보인다.)



 위 결과 화면은 상대 호스트 ARP 테이블에서 게이트웨이를 스푸핑한 상태이다.
상대 호스트는 게이트웨이가 내 컴퓨터의 주소인 줄 알고 나에게 보내는 상황이다.

하지만 그에 대한 응답이 안오고 있다. ( 이유는 내가 지금 포워딩을 안해주고 있기 때문에 )


이렇듯, 포워딩을 해줘야 완벽한 스니핑을 할 수 있게 된다.

포워딩이란 상대 호스트의 패킷이 원래 가던 길로 내가 다시 보내줘야된다는 뜻이다.
정확한 뜻은 패킷이 목적지 까지 도착하도록 올바른 길로 보내는 것을 포워딩이라고 한다.

그렇기 때문에 들어온 패킷을 원래 보내려던 목적지 호스트의 맥주소를 참조해서 패킷을 새로 만들고 보내 줘야한다.
목적지 호스트의 맥주소를 알기 위해서 우리는 ARP 테이블을 사용할 것이다.
(우리의 ARP 테이블에 목적지가 있다고 가정했다.)

우리는 이 기능들을 subprocess 모듈을 이용해서 구현할 수 있다.



(subprocess)



subprocess에서 arp -a 명령어로 ARP 테이블을 확인 할 수 있는 화면이다.



(맥 주소를 구해내는 코드)



우리는 위의 방법으로 arp 테이블에서 목적지 호스트의 맥주소를 참조할 것이다.



(포워딩 부분 코드)



위의 코드로 생성을 했다.

하지만 여기서 문제가 있었다.
상대호스트에게 ARP 스푸핑을 하는데
내 컴퓨터의 ARP 테이블에도 영향이 간다는 것이다..

그래서 완벽하게 스니핑 프로그램을 완성하지 못했다.

지금 마주한 문제를 곰곰히 생각해봐야겠다.




스니프( Sniff )
Packet sniffing
 - 남의 패킷을 가로채는 공격기법들
 - ARP Spoofing (ARP를 속여서 가로채는 것)
 = ARP Cache Poisoning 공격 기법

 - MITM ( Man In The Middle ) 중간자 공격

우리가 쓰고 있던 덤프 프로그램을 스니퍼 프로그램으로 만들어 보겠다.

우선 필요한건
1. 장치명을 매번 입력받는것
2. 원하는 패킷만을 보길 원한다.
  -> 소스코드를 수정하면서 확인했었다.
이다.

먼저, 실행인자를 이용해볼 것이다.
예를 들어



(ipconfig /all 옵션)



ipconfig 뒤에 붙는 옵션처럼
원하는 필터링의 옵션을 추가할 것이다.

스니핑 프로그램을 제대로 만들기 위해
먼저 패킷덤프 프로그램을 쓸모있게 만드는게 필요하다.

필요한 인자를 받아서 옵션을 만들것이다.
-> sys, optionparse  모듈이 파이썬에 이미 있다.
우리는 이것을 이용할 것이다.




(파이썬3의 optparse 모듈)



파이썬3의 optparse 모듈

인자를 받는 모듈을 이용해서
옵션을 5개 추가해 보았다.

옵션처리 방식(닉스계열 (유닉스, 리눅스))
#> python sniffer.py -t 192.168.3.88
       -p ARP    
       -s  (출발지 IP)
       -d (도착지 IP)

#> python sniffer.py --protocol ARP
       --target          (긴옵션)

* 필터링 룰을 넣어줄 것이다.
option
 -s : 출발지 ip 주소
 -d : 도착지 ip 주소
 -a : 출발지와 도착지 상관없이 필터링
 -p : 확인하고자 하는 프로토콜 타입
 -m : 동작모드(덤프/스니프)



(옵션 설정 코드)



(옵션이 입력된 것을 확인했다.)



-h 의 도움말 옵션까지 추가해 그럴싸한
프로그램으로 만들생각이다.



(usage를 추가하고 -h 인자를 추가한 코드)



(python test.py -h 를 입력하면 옵션이 나온다.)



우선
ARP 만 출력하는 모습을 보이겠다.

옵션 -p ARP 를 입력하면
ARP 만 나오게 하는 코드이다.



(옵션을 추가해서 조건을 걸은 코드)




(실행화면)



실행화면을 보면
ARP 패킷만 덤프되는  것을 확인 할 수 있었다.







+ Recent posts