어제까지 ARP Spoofing공격을 공부했다.

이 ARP Spoofing 공격이 가능한 이유는
인증과정에 대한 부재가 원인이다.

 인증과정을 거치면 속도가 느려진다. 그렇기 때문에 추가하지 못하고있다.
 (V3도 ARP Spoofing을 막아준다.)

막으려면
 arp -a 를 들어가서 ARP 테이블을 들어가보면 유형에 동적이라고 나와있다.
동적 -> 직접입력 안해도 되고 바로바로 인터넷을 쓸수 있다.
정적 -> 안전하다. 하지만 계속 업데이트를 직접 해줘야한다.
명령어
arp -s (옵션)
arp -s  (정적으로 바꿔줄 수 있다.)



(정적으로 바꾼 화면)



탐지 하는 법
1.서로다른 IP에 대해 중복되는 맥주소가 있을 때
2. 대량의 ARP 패킷이 탐지 될 때

Layer 3에 대한 이해
 - 어떻게 IP헤더만을 가지고 다른 네트워크와 통신이 가능한가?
 - 이더넷헤더 + IP 헤더
 
 - ICMP (Internet Control Message Protocol)
 - 네트워크상에 오류를 제어하기 위한 목적
 - 요즘엔 효율성은 별로 없는데 취약점들이 너무많아서
   ping정도만 사용된다.

ICMP - 오류상황 전달, 서버와의 시간 동기화 등
       많은 타입의 ICMP가 있다.


ICMP 공통헤더
 - type(1) : ICMP 패킷의 타입
 - code(1) : ICMP 패킷타입의 세부 정보
 - checksum(2)

ICMP 타입에 따른 헤더

- ping : Echo Request(8번) (ICMP의 한 종류다.)
서버입장에서 ping을 차단시키는 경우도 있다.
(공격으로 이용할 수 있기 때문이다.)

원래 용도는 상대와 통신이 잘되는지 테스트하는 용도다.

우리는 ping 패킷을 만들어볼 것이다.



(ICMP 패킷을 생성한 코드)




(출력해보면 헤더가 잘 만들어졌음을 확인 할 수 있다.)



type : 8번
 identifier(2)
 sequence number(2)    
 payload(?) - 정하기 나름이다. 여기 들어있는 데이터 그대로 응답이 온다.
      - 별 의미는 없다. ping의 크기를 조절하기 위한 것이다.



(ping 메세지 테스트를 위해 수정한 코드)





(ping을 보내고 응답을 받은 것을 확인할 수 있다.)




(cmd 창에서 ping 메세지를 사용해서 확인한 결과)



- 응답이 오는것을 확인 할 수 있다.

* IP Spoofing (L3에서 할 수 있는 공격)
 - IP값을 변조
 - 0ffset, IP 주소 등등

다음 주 부터는 IP에 관한 내용을 살펴보고
L4부터 취약점을 파악해보겠다.




Layer 1 - 물리적인 전송을 담당한다.
            - 전기 신호
 ex) 허브에 스타토폴로지로 host들이 연결되있다.
 한 host에서 전기신호를 보내고 그 전기신호를 수신하여서 데이터를 주고받는다.

Layer 2 - 데이터 링크 계층
 
 - 터널링관련 프로토콜 : PPP, L2TP, ...
 - 라우팅이 필요하지 않는 계층
 - 라우팅없이도 통신이 가능하다.
- 이더넷, 토큰링방식
 토큰링 방식 (토큰을 가진사람만 보낼 수 있고, 그 토큰은 네트워크를 돌아다닌다., 충돌을 예방하는 방법이다.)
  - 단점 : 토큰이 돌아서 내 차례가 될때까지가 오래걸린다.
 이더넷 : Collison Domain (충돌을 이용한다.)
 이더넷 헤더 (고정 : 14바이트)
 -우리는 보통 이더넷을 사용한다.

* 각 계층별 주소
L4 - Port Number
L3 - IP Address
L2 - MAC 주소. (Media Access Control) : 하드웨어 주소
 - 16진수 6자리  (유일한 주소)

 L2까지 합하면 패킷의 구성은
 
   - 이더넷 + IP + TCP/UDP + 데이터

지금까지 IP, TCP/UDP, 데이터까지 보았다.
 
기존에 만들었던건 윈도우즈 소켓을 이용해 패킷을 덤프했던 것이다.
이 윈도우즈소켓으로는 L3까지밖에 확인이 안된다.
그래서
L2까지 보기위해 다른 방법을 사용해보겠다.

새로 만든 모듈을 이용했다.



(모듈로 설정한 get_device)





(실행화면)



어떤 장치로 들어오고 나가는 내용을 화면에 출력할지를 정해야한다.
화면에서 Microsoft 라고 나온것이 무선어댑터 지금 사용하는 것이다.

 실행하면 인터페이스를 선택하라고 나온다.
이 때 여기서 나오는 인터페이스란

제어판에서 네트워크 정보에갔을 때 나오는 목록이다.
이 목록은 컴퓨터의 네트워크 장치이다.
이제 이 장치로부터 패킷을 가져와 열어보겠다는 것이다.





(두개의 어댑터)



이 화면은 집마다 다르다.

여기서 전에 소켓통신했던것과 유사하게
핸들러(장치를 다룰) 를 선언했다. 소켓과 비슷한 역할이다.

그 후 전에 덤프 프로그램과 비슷하게 작성해준다.



(패킷을 덤프받아 출력하는 코드)



이렇게 하면 전에 사용했던 프로그램과 비슷한 모양의 코드가 된다.



(실행 화면)



출력을 해보면 데이터가 출력된다.
캡쳐된 내용을 보면 앞에 14바이트 빼고는 지금까지 봤던 정보들이다.

앞에 14바이트는 이더넷프레임이다.


['0xff', '0xff', '0xff', '0xff', '0xff', '0xff', '0x90', '0x9f', '0x33', '0xeb', '0x34', '0xa1', '0x8', '0x0']

분석해보면
1. 도착지 맥주소(6바이트) :  0xff', '0xff', '0xff', '0xff', '0xff', '0xff
2. 출발지 맥주소(6바이트) : '0x90', '0x9f', '0x33', '0xeb', '0x34', '0xa1'
3. 프로토콜 타입(2바이트) : '0x8', '0x0'
                                          - 0x0800 -> IPv4  , IP 프로토콜
                                            0x8600 -> IPv6
                                            0x0806 -> ARP 프로토콜

통신을 하려면 MAC주소를 알아야한다. 하지만 우리는 IP주소만 알고있다.
그렇기 때문에
ARP 가 필요하다.
ARP : Address Resolution Protocol

이제 전에 작성했던 프로그램에서 L2까지 나오는프로그램으로 확장시켜본다.



(확장 코드)




(출력 화면)


출력 화면을 보면 이제 L2의 프레임 단위로 패킷을 확인할 수 있는것을 볼 수 있다.

이제 내일부터
이 내용을 가지고 네트워크를 살펴보겠다.




+ Recent posts