은근 복잡복잡.

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를 만들어보겠다. 아직 성공 못함.



WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/