-
[ARP spoofing] 2. ARP protocol 파헤치기해킹/network 2023. 5. 30. 12:40
ARP 란?
이번시간엔 arp의 구조에 대해 알아보도록 하겠다.
ARP 는 Address Resolution Protocol의 약자로, 3계층의 IP주소로 2계층의 mac 주소를 알아내는 프로토콜이다.
arp protocol은 데이터링크 계층과 네트워크 계층의 사이에 위치한다.
정확히 하나의 계층으로 분류하자면 2계층(데이터링크) 프로토콜이다. 하지만 사람들마다 다양하게 해석하는 것 같아서 큰 의미는 없다고 본다.
2계층과 3계층에서 사용하기 때문에 arp 에는 ethernet header가 존재한다.
그 헤더를 벗겨내고 arp 구조만 살펴보면 아래와 같다.
출처 : https://mr-zero.tistory.com/23 자세한 protocol의 구조는 다른 블로그를 참고해주시길 바랍니다..
우리는 여기서 operation code와 4가지 주소에 집중하면 된다.
나머지 bit는 ethernet이냐 ipv4를 사용하냐 등등으로 결정되는데, arp spoofing 프로젝트를 할 때는 고정된 값을 사용한다.
operation code 는 아래와 같다.
출처 : https://mr-zero.tistory.com/23 우리는 ARP reply를 사용할 것이므로, 0x02를 세팅해주면 된다.
ARP reply는 "xxx.xxx.xxx.xxx라는 IP주소를 가진 사람은 xx.xx.xx.xx.xx.xx라는 맥주소를 가진다"라고 알려주는 것이다.
그리고 4가지 주소의 의미는 다음과 같다.
이해를 쉽게 하기 위해, a가 b에게 reply를 보낸다고 해보자. a는 자신의 맥 주소를 b에게 알려주고 싶다.
- Source Hardware Address : a의 MAC주소
- Source Protocol Address : a의 IP주소
- Destination Hardware Address : b의 MAC주소
- Destination Protocol Address : b의 IP주소
이를 이용해서, 우리가 감염시킬 때 사용하는 방법은 아래와 같게 된다.
memcpy(packet + 22, MY_MAC, 6); memcpy(packet + 28, GATEWAY_IP, 4); memcpy(packet + 32, TARGET_MAC, 6); memcpy(packet + 38, TARGET_IP, 4);
이 코드가 하는 일은 패킷을 생성하는 것인데, 위에서 설명한 4가지 주소를 설정하는 부분이다.
위처럼 ARP reply를 만들게 되면 의미는 다음과 같다.
"gateway IP주소에 해당하는 MAC주소는 MY_MAC이다(해커의 MAC). 이 reply를 TARGET에게 보내겠다"
따라서 이 ARP reply를 만들어서 해커가 피해자에게 계속 보내게 되면, 피해자는 gateway ip주소에 해당하는 mac 주소를 해커의 mac 주소로 저장하게 되어, arp table이 감염이 된다.
반대로 감염시킨 arp table을 원상복구하는 코드는 아래와 같다.
memcpy(packet + 22, GATEWAY_MAC, 6); memcpy(packet + 28, GATEWAY_IP, 4); memcpy(packet + 32, TARGET_MAC, 6); memcpy(packet + 38, TARGET_IP, 4);
달라진건 첫 번째 address이다. gateway ip주소에 해당하는 mac주소를, gateway의 mac주소로 정상적으로 세팅해준다.
이 reply를 target에게 보내게 되면, 감염되었던 arp table이 원상복구가 된다.
이제 어떤 식으로 ARP spoofing이 가능한지 이해가 됐을 것이라고 생각한다.
우리는 이런 잘못된 arp reply를 주기적으로 피해자 pc에게 보내서 피해자의 arp table을 감염시킬 것이다.
이렇게 되면 피해자가 보내는 모든 요청이 gateway로 가지 않고 해커에게 오게 된다.
이제 우리는 이 요청을 어떻게 처리할 것인지 다루면 된다.
다음 시간에는 전체적인 코드를 리뷰하면서, 패킷 처리를 어떻게 했는지 알아보도록 하자.
'해킹 > network' 카테고리의 다른 글
[ARP spoofing] 4. (최종) Arp spoofing 코드로 구현하기 (0) 2023.06.01 [ARP spoofing] 3. Websocket protocol 파헤치기 (0) 2023.05.31 [ARP spoofing] 1. ARP spoofing 프로젝트 시작하기 (0) 2023.05.30