은근 복잡복잡.
rogue AP를 만들어보자.
일명 가짜 Access Point. Fake AP. 리눅스에서 무선 랜카드가 실제 AP인 것처럼 만드는 것이다.
일반적인 통신은 Client->AP->ISP 식으로 이루어지지만
Rogue AP를 통한 통신은 Client->Rogue AP->AP->ISP 식으로 이루어진다.
Rogue AP를 만드는 Linux는 두 개의 NIC를 통해 하나는 Rogue AP를 위하여, 다른 하나는 일반적인 NIC처럼 실제 AP에 연결한다.
이를 통해 AP처럼 인터넷을 공유하거나 MITM 공격을 시도할 수 있다.
다음 실습에서는 eth0가 일반적인 NIC가 되고, wlan0이 rogue ap가 될 것이다.
환경 : 가상머신 ubuntu 14.04
네트워크 어댑터 eth0는 NAT든 Bridged든 상관없다.
실습은 NAT에서 진행했다.
<use root>
sudo su
<package install>
apt-get install hostapd isc-dhcp-server -y
<Wireless NIC Connect>
무선 랜 카드 컴퓨터or노트북에 연결
iwconfig
잘 연결되었는지 확인
NIC driver명은 wlan0로 가정함.
<hostapd configure>
hostapd는 rogue ap를 만들어 줄 패키지이다.
vi /etc/hostapd/hostapd.conf
hostapd 설정은 http://melpin.tistory.com/?page=2 참조. 그대로 복붙해서 사용해도 무방.
ssid과 channel만 필요에 따라 수정. channel이 같은 AP가 존재할 경우 간섭이 발생할 수 있다.
<isc-dhcp-server configure>
isc-dhcp-server는 rogue ap에 연결된 victim(피해자)들에게 실제 AP처럼 DHCP 서비스를 해줄 패키지이다.
backtrack의 dhcp3-server 서비스와 동일하다.
vi /etc/default/isc-dhcp-server
#은 주석이므로 있으나없으나 동일
주석 부분 하이라이팅이 안될 경우 vim 패키지 설치.
아래와 같이 수정
INTERFACES="wlan0" # 스크린샷 상에는 eth0가 포함되어 있으나, 없어도 될 것이다.
vi /etc/dhcp/dhcpd.conf
ddns-update-style none;
option domain-name-servers 8.8.8.8; #Google DNS server
option routers 192.168.54.1; #rogue_ap의 IP Address
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.54.0 netmask 255.255.255.0 #network
{
range 192.168.54.2 192.168.54.254; #IP 할당 range
}
log-facility local7;
서브넷마스크상 192.168.54는 네트워크 부분. 그 뒤는 호스트 부분.
이해하는 한도 내에서 자유롭게 수정 가능하다. 게이트웨이 아이피든(option routers) 네트워크든(192.168.54)
이 실습에서는 rogue ap의 IP(Gateway)가 192.168.54.1라고 가정한다.
<NIC configure>
ifconfig
현재 상태
wlan0을 켜보자.
ifconfig wlan0 up
그런데 오류 발생.
RF-kill이 필요하다.
rfkill list
무선랜이 block 되어있다.(막혀있다)
풀어주자.
rfkill unblock wlan
rfkill list
block이 해제된 것을 확인.
wlan0 up 재시도
ifconfig wlan0 up
wlan0을 켰다.
wlan0은 rogue ap가 될 NIC이므로, static IP(고정. 정적 IP)를 할당해주자.
ifconfig wlan0 192.168.54.1 netmask 255.255.255.0
잘 설정되었다.
이제 hostapd와 isc-dhcp-server 패키지를 실행해보자.
<service start>
/etc/init.d/isc-dhcp-server restart
동일한 명령어로
initctl restart isc-dhcp-server
service isc-dhcp-server restart
가 있으나, 해당 환경에서는 제대로 작동하지 않거나 성공/실패 여부를 보여주지 않았다.
서비스를 시작한 적이 없으니 stop은 당연히 fail이지만
start가 fail 되었다. 출력문을 따라서 syslog를 참조해보자.
(잘 실행되었으면 pass)
--pass--
파일을 열 수가 없다는 에러 로그.
그렇다. 필자는 다른 터미널에서 서비스를 실행하느라 root 권한이 아니었다. 이상한 데에서 시간 허비했다. (...)
엄한 데에서 헤맸다.
echo > '/var/lib/dhcp3/dhcpd.leases' # 해당 파일을 초기화한다. 수행하지 않아도 무방하다.
--pass--
dhcp 서버 실행 후
root 권한으로..
hostapd /etc/hostapd/hostapd.conf
아까 생성한 hostapd.conf 파일의 설정대로 hostapd를 실행했다.
가끔 이 부분에서 에러가 발생하는 경우가 있는데
nmcli nm wifi off
rfkill list
혹시 wlan이 block되어있는 지 확인하자.
hostapd까지 잘 실행되었다면, 와이파이가 만들어진 것이다.
또다른 무선 랜카드나 스마트폰 등으로 와이파이를 확인해보자.
필자는 ssid가 ssaemo_free인 와이파이가 생겨있었고, 해당 와이파이로 접속하면
IP 할당까지 완료되어 잘 연결되었다.
하지만 인터넷은 되지 않는다.
이제 wlan0에서 받은 패킷을 eth0로 리다이렉션해줘야할 차례이다.
커널 레벨에서의 IP 포워딩도 필요하다.
어떤 상태인지 궁금하다면 wireshark를 통해 wlan0과 eth0를 확인해보자.
<Packet Relay/Redirection>
IP 포워딩부터 하자. hostapd는 끄지않고 진행해도 된다.
echo 1 > /proc/sys/net/ipv4/ip_forward
또는
sysctl net.ipv4.ip_forward=1
이것은 OS 종료 전까지의 임시 세팅이다. 기본값은 여전히 0이므로, 부팅 시마다 이 값은 1이 아닌 0으로 세팅된다.
패킷을 리다이렉션 해주기 위해 iptables에서 설정을 해주자.
iptables -t nat -L : nat 테이블을 확인하는 명령어
iptables -L : default 테이블인 filter 테이블을 확인하는 명령어
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -P FORWARD ACCEPT
-t nat : nat 테이블
-A POSTROUTING : POSTROUTING 체인에 추가
-o eth0 : output NIC 설정
-j MASQUERADE : -j 옵션은 동작 설정. MASQUERADE는 SNAT와 같은 동작으로, 패킷을 리다이렉션하는 동작이다.
-P : Policy. 기본 정책. 설정이 없는 패킷에 대한 처리. filter 테이블의 FORWARD 체인의 기본 정책을 ACCEPT(허용)으로 바꾼다. 아무 설정이 없으므로 모든 패킷은 ACCEPT 된다.
여기까지 설정했다면 인터넷이 이제 잘 될 것이다.
리눅스 외 다른 기기에서(스마트폰) 와이파이를 연결하고, 인터넷을 연결해보자.
필자는 엄청 느리긴 하지만, 인터넷 연결이 가능했다!
다음 글은 aircrack-ng를 통해 rogue ap를 만들어보겠다. 아직 성공 못함.
'etc' 카테고리의 다른 글
플랫폼 vs 프레임워크 vs 라이브러리 (0) | 2015.11.18 |
---|---|
문자열 인코딩의 모든 것 ! (Unicode/UTF-8/ANSI) (8) | 2015.11.18 |
Windows Active X 빨리 없애주시죠 (0) | 2015.11.16 |
kimyuna (0) | 2015.11.03 |
[Corelan Exploit Tutorial] 1. Stack Based Overflow (0) | 2015.11.02 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/