안녕하세요. 오늘은 Sniffing(스니핑), Spoofing(스푸핑)에 대해서 알아보고 전공 수업에서 실습했던 SEEDLabs를 기반으로 스니핑, 스푸핑 실습을 해보겠습니다.
Sniffing이란?
네트워크 상에서 흐르고, 이동하는 데이터 조각들을 패킷이라고 합니다. 이런 데이터(패킷)들의 흐름을 몰래 감청, 도청하는 것을 말합니다. 패킷에 담긴 비밀번호, 이메일 등 민감 정보를 알아내는 것을 목적으로 합니다. 이러한 스니핑에는 크게 두 가지 종류가 있습니다
- Active Packet Sniffing : 주로 스위치를 이용한 능동적인 방식의 Sniffing을 말합니다. 스위치는 브로드캐스트 방식이 아니기 때문에 다른 포트에서 발생하는 패킷을 보는 것이 불가능합니다. 따라서 ARP Cache Poisoning 등의 방식을 이용합니다.
- Passive Packet Sniffing : 허브를 통해 단순히 감청, 도청만 하는 수동적인 행위를 말합니다. 허브는 모든것을 브로드캐스팅 하는 특징이 있는데 이를 이용한 것이죠. NIC를 무차별모드(Promiscuous mode)로 바꾸는 방식으로 이용합니다. 이렇게 스니핑에 이용하는 장비를 스니퍼(Sniffer)라고 부르기도 합니다. 이 경우는 탐지가 어려울 수 있습니다.
무차별 모드 : 필요한 패킷만 필터링 하는 것이 아니라, 무차별적으로 네트워크의 모든 패킷을 수신하는 것을 말한다.
Sniffing의 대표적인 종류
<Switch Jamming>
스위치 재밍은 스위치의 MAC Address Table 버퍼를 오버플로우 시켜서 스위치를 허브처럼 동작하게 하는 것입니다. 허브는 모든것을 브로드캐스팅 하는 특징이 있기 때문에 해당 공격은 패킷 감청을 쉽게 만들 수 있습니다. 스위치가 Fail Open이라는 특성을 이용한 것입니다
Fail Open : 장애 발생 시 모든 기능을 허용하는 정책
<ARP Cache Poisoning>
ARP 프로토콜은 로컬 네트워크 상에서 IP와 MAC주소를 변환하는 프로토콜을 말합니다. IP에 해당하는 MAC주소를 적어놓은 것을 ARP Cache Table이라고 하는데, 이 캐시 테이블의 MAC 주소를 공격자의 MAC 주소로 변경하는 것을 말합니다. 이렇게 되면 해당 IP 주소로 가야할 패킷이 공격자의 기기로 오게 됩니다.
<ARP redirect>
공격자가 마치 자신이 라우터 인것처럼 MAC 주소를 위조, ARP Reply 패킷을 네트워크에 브로드캐스트하는 것을 말합니다. 이로써 해당 로컬 네트워크 내의 패킷들은 공격자의 기기를 한번 거친 후 실제 라우터로 가게 됩니다.
Spoofing이란?
스푸핑은 마치 다른 사람인 것처럼 위장해서 리소스에 접근하는 것을 말합니다. 스푸핑은 스니핑보다 능동적인 방식의 공격입니다. 리소스에 접근은 하되 자신의 신원을 숨기는 것을 목표로 합니다.
Spoofing의 대표적인 종류
<IP Spoofing>
자신의 IP주소를 다른 사람인 것처럼 변조하여 시스템에 접근, 리소스를 빼오는 것을 말합니다. 공격자는 스푸핑된 주소로 위장해서 메세지를 보낼 순 있지만 메세지를 수신하는 것은 어렵습니다.
<Email Spoofing>
위조된 이메일 주소를 사용해서 메일을 보내는 것을 말합니다. 이메일 전송 프로토콜인 SMTP에는 이메일 주소를 인증하는 체계가 없다는 점을 악용한 공격입니다. 이메일 주소를 위조하는 것은 비교적 쉽기 때문에 스팸 메일, 피싱 메일 등에 사용되기도 합니다.
<DNS Spoofing>
DNS는 도메인 주소를 IP주소로 변환시켜주는 프로토콜을 말합니다. DNS 덕분에 숫자로 이루어진 IP주소를 입력하지 않고, 직관적인 문자 주소를 이용해도 홈페이지에 접속이 가능한 것입니다.
DNS Spoofing은 도메인 주소를 IP주소로 변환해주는 DNS 서버를 장악하거나 DNS 트래픽을 이용해서 원래의 사이트가 아닌 악의적인 사이트로 이동시키는 것을 말합니다.
Sniffing과 Spoofing을 구분해서 적었지만, 실제로 찾아보고 공부해보니 Sniffing과 Spoofing은 아주 밀접한 연관이 있다는 생각이 들었습니다. (Sniffing을 위해서는 일부 Spoofing이 필요하고 Spoofing을 위해서는 기본적인 Sniffing도 필요하고…)
SEEDLabs를 통한 Packet Sniffing&Spoofing 실습
https://seedsecuritylabs.org/Labs_20.04/Files/Sniffing_Spoofing/Sniffing_Spoofing.pdf
위의 링크를 참고하시면 도움이 될 듯 합니다!
Lab Task Set 1: Using Scapy to Sniff and Spoof Packets
Scapy를 이용해서 패킷 스니핑, 스푸핑을 해보는 task입니다
Scapy란?
파이썬 라이브러리로, 다양한 프로토콜의 패킷을 위조하거나 해독하고, 이를 유선으로 전송하며, 캡처하고, 요청과 응답을 일치시키는 등 다양한 기능을 제공합니다.
Scapy
scapy.net
해당 실습을 위해 Victim1, Victim2, Attacker 총 3개의 가상 머신을 생성해주었습니다.
첫번째로, Scapy를 이용해서 Victim Network간의 ICMP 패킷을 스니핑해보겠습니다.
Attacker의 PC에 vi에디터를 사용해서 mycode.py를 만든 모습입니다.
이때 IP()는 IP 패킷을 생성하였다는 뜻이고 show()는 생성된 패킷 a를 확인하는 명령어입니다.
실행하면 패킷에 대한 정보가 쭉 뜨는 것을 알 수 있습니다.
위 코드는 두 victim간의 패킷을 스니핑 하기 위한 코드입니다. (sniffer.py)
해당 코드는 icmp패킷을 enp0s3 인터페이스에서만 스니핑하고 받은 패킷을 print_pkt함수에 전달, 이후 print_pkt가 받은 패킷을 show를 통해 출력하는 역할을 합니다.
스니핑 전, victim1에서 2로 핑을 보내보았습니다.
양쪽 모두 잘 교환되는 모습을 확인할 수 있습니다.
이후 attacker 측에서 아까 만들었던 sniffer.py를 실행하면 아래와 같이 스니핑된 패킷이 show()되는 것을 확인할 수 있었습니다.
참고 : 여기서 세 가상머신 모두 무작위 모드를 허용해주어야 스니핑이 가능했었습니다.
두번째로 Spoofing 실습을 해보도록 하겠습니다.
Attacker의 입장에서 자신이 아닌 것처럼 위장해서 패킷을 보내는 실습입니다.
attacker의 가상머신에서 source를 victim1로, destination을 victim2로 지정해주고 패킷을 보내는 코드를 짰습니다 (spoofing.py)
이후 Send()를 통해 위조한 icmp 패킷이 전송되게 됩니다.
sudo python3 명령어를 입력하여 패킷을 보냈습니다.
해당 코드가 정상적으로 작동된다면 패킷의 Source Address가 Attacker주소가 아닌 Victim1 주소가 뜰 것입니다.
이를 트래픽을 보면서 실제로 확인해보도록 하겠습니다.
victim1과 victim2의 WireShark에서 확인해본 모습입니다.
Wireshark는 오픈 소스 패킷 분석 소프트웨어입니다
스푸핑 결과 실제 패킷을 보낸 측은 attacker이지만 수신자는 다르게 표시되었음을 확인할 수 있었습니다.
저는 Sniffing, Spoofing에 대한 간단한 실습만 진행했습니다.
SEEDLabs에서 더 많은 실습을 제공하고 있으니 관심있는 분들은 찾아보시면 좋을 것 같습니다!
참고
https://ko.wikipedia.org/wiki/무차별_모드
https://velog.io/@saseungmin/스니핑과-스푸핑의-종류
https://en.wikipedia.org/wiki/ARP_spoofing
https://www.cloudflare.com/ko-kr/learning/email-security/what-is-email-spoofing/
'보안이론' 카테고리의 다른 글
[Cryptography] 블럭 암호 운영 모드 ECB, CBC, CFB, OFB, CTR (0) | 2025.02.14 |
---|---|
[Cryptography] 블럭암호 AES 원리, 안전성 (0) | 2025.02.14 |
[Cryptography] - 블럭암호 DES 원리, 취약점 (0) | 2025.02.13 |
[Web Hacking] CrossSite Request Forgery(CSRF), 사이트간 요청 위조 (0) | 2025.02.11 |
[Crypto Hacking] 해시함수와 Hash Collision Attack (0) | 2025.02.10 |