先日、様々なニュースサイトに上がっていた無線設定乗っ取りのニュースがありました
家庭用ルーターの不正利用に関する注意喚起について 警視庁
これはまずいと自宅のWi-Fiを確認しようと思いましたが、
設定を確認したのは購入した時しか確認しておらず、
ログインはおろかなんの設定が入っているのかわかりませんでした。
この記事を見ていると定期的に設定が変わっていないか確認しなければいけないと感じたので
クリック一つで問題ないことを確認するツールを作成するに至りました。
今回は、どのように作成したかのポイントをご紹介と実際にseleniumを使用した確認ツールを作成しましたのでご紹介いたします!
どんな不正利用をされるのかを確認してみる
今回の注意喚起にはこのようなものでした。
不正利用の内容は?
どのようなところを確認すればいい?
実際に手動で確認してみた
私の家にあるWi-Fiルータは下記のルータです。こちらのルータをもとに確認や作成してみました。
まずはログインしてみる
まずは無線ルータの設定ページを開くところから確認してみました。
大体の無線設定の宛先はLAN側のデフォルトゲートウェイとなっているので確認してみました。
上記のセキュリティに関係あるため画像は省略しますがうまくログイン表示まで出ました。
ベーシック認証を購入時の情報が載っているシールを確認しながらログインしたところ
無事設定ページまでたどりつくことができました。
今回の注意事項がオフになっているか確認してみる
今回見なくてはいけない設定として
- VPN設定
- DDNS設定
- 外部ログイン設定
を確認してみましたが、私のルータはIPv4オンリーの設定ではないとほとんどがOFFとなることを確認しました。私の環境ではIPv4 over IPv6で設定されていました
またDDNSですがIPが直指定されていたので今の環境では特に問題なしと判断しております。
ツール作成に当たって軽く設計してみる
今回の調査で私のルータはインターネット接続方法を確認すればひとまず今回のセキュリティ上OKだったのでシンプルに記載したいと思います!
フローを考えてみる
ルーターのIPアドレスでアクセス
↓
ベーシック認証をしてトップページを表示する
↓
該当の設定ページに遷移する
↓
インターネット接続方法が変わっていないことを確認
↓
結果を表示
参考)seleniumの使用時にベーシック認証を突破する
seleniumを使用した際にベーシック認証は今までのほうほうでは突破できません。
それはポップアップの操作自体はできるのですが、
最初に指定したURLが表示されないとエラーとなってしまう特性があるので
URLに少し工夫が必要となります。それはこちらになります。
http://[ベーシック認証のユーザ名]:[ベーシック認証のパスワード]@[本来のURL]
とすることでベーシック認証を表示することなくログインすることができます。例えば、
URL:192.168.3.1
ベーシック認証のユーザ名:user
ベーシック認証のパスワード:pass
だとしたら
http://user:pass@192.168.3.1
となります。
完成したコードはこちらになります
from selenium import webdriver
from selenium.webdriver.chrome import service
from selenium.webdriver.common.by import By
from time import sleep
import os
#seleniumの必要なもの呼び出し
chromedriver = "C:\autotest\chromedriver.exe"
chrome_service = service.Service(executable_path=chromedriver)
driver = webdriver.Chrome(service=chrome_service)
#入力しやすくするための変数
#ユーザ名
username = "hogehoge"
#パスワード
password = "fugafuga"
#アクセスするIP
URL_IP = "192.168.10.1"
#ブラウザを起動してURLアクセス
driver.get('http://'+username+':'+ password +'@'+URL_IP)
#メニューからインターネットをクリックする
driver.find_element(By.XPATH,'//a[@id="menu_1"]').click()
#フレームが使用されているのでフレーム切り替え ※フレームの扱いについては後ほど説明します
iframe = driver.find_element(By.XPATH, '//*[@name="iframe"]')
driver.switch_to.frame(iframe)
#ラジオボタンが変更されていないか確認する
result = driver.find_element(By.XPATH,'//*[@id="v6plus_radio"]').is_selected()
#ラジオボタンの有無をもとに結果を表示
print("結果:")
if result:
print("〇〇〇設定は変更されておりませんでした〇〇〇\n")
else:
print("×××設定は変更されていますログインして内容を確認してください×××\n")
os.system('PAUSE')
最後に
結果はこのようになります。無事確認出来るツールができました。
今回のシナリオを作成するにあたってフレームの切り替えが必要な場面がありました。それは今回のコードに記載した方法を含めて2つほど回避方法がありますが後ほど記事にしたいと思います。
コメント