乙Py先生のプログラミング教室

乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

今回はTBSのドラマ
トリリオンゲームに出てきた
監視カメラのハッキングシーンの
技術解説です

解説動画はこちら




はじめに

ドラマ中の技術解説や啓蒙活動を目的とおり
この内容を不正に利用して犯罪行為を行った場合
不正アクセス禁止法などの法律に抵触する恐れがあります

不正な目的でコマンドやプログラム等を
利用しないようお願いいたします


トリリオンゲームについて

2023年7月14日より放送の
TBS金曜ドラマ『トリリオンゲーム』
主演:目黒蓮(ハル)、佐野勇斗(ガク)、今田美桜

コミュニケーション能力が武器のハルと
気弱なパソコンオタクのガクが1兆ドルを稼いで
この世のすべてを手に入れようと成り上がる
エンタメドラマです



表題のシーンについて

不良に絡まれていたガクを助けたハルが
不良をボコボコにした所を
監視カメラに録られてしまったので

それをガクが監視カメラにハッキングして消す
というシーンです


この記事の引用元について

技術監修
 Flatt Security

技術協力
 株式会社リチェルカセキュリティ

こちらの記事から引用しています

引用元




シーンのハッキングシナリオについて

技術協力の株式会社リチェルカセキュリティさんの
記事ではこう書かれています


1.airodump-ngでターゲットWi-Fiのパケットを収集
2.aircrack-ngで収集したパケットからPTW攻撃でWEPキーを解析
3.ターゲットWi-Fiのネットワーク内に侵入してnmapでIPスキャン
4.IPスキャン結果を用いて、各機器にnmapでポートスキャン
5.監視カメラに用いられるRTSPポート(554番)を発見、機器を特定
6.監視カメラ管理ページのログインをhydraによる辞書攻撃で突破
7.管理者としてGUIで動画を削除



ここから用語を見ていきましょう


・airodump-ng
周辺の Wi-Fi の情報を取得することができる
ツールのことです

airodump-ngでWi-Fiのパケットを収集して
ターゲットのアクセスポイントを特定できます

sudo airodump-ng start wlan0


・Aircrack-ng
WEPやWPAキーのクラッキングプログラムのこと
周辺のAPのパケットを収集したりすることが出来ます
PTW攻撃が実装されています

・WEP(Wired Equivalent Privacy)
ワイアード・エクイヴァレント・プライバシー
無線LAN(Wi-Fi)通信の初期の暗号化方式の一つ

・PTW攻撃
WEPキーを特定するための攻撃の一種

無線LANの暗号化方式がWEPの場合
このPTW攻撃では、平均4万パケットを傍受するだけで
WEPキーが解読できてしまうらしい


・Nmap (Network Mapper)
ネットワーク調査および
セキュリティ監査を行うためのツールです

ネットワーク上にどのような機器やサービスが動いているか
特定ポートで動作するサービスアプリケーションの種類と
バージョンを検出する機能があります

 nmap ターゲットのIPアドレス


・RTSP(Real Time Streaming Protocol)
映像・音声の配信を制御するためのプロトコル
554番ポートがよく使われる


・hydra
Macにも昔から存在するパスワードクラッキングツール
ブルートフォース攻撃を行うことが出来ます

ブルートフォース攻撃ではパスワードによく使われる
文字列の辞書を使って高速でパスワードを破る
辞書攻撃の仕組みを持つツールが存在します

これでパスワードをクラックして
監視カメラにアクセスするという流れです

最後は

管理者権限さえあれば何でも出来る!!!!

ということになります



まとめ

・不正な手段を用いてコンピューター機器にアクセスすると
「本来アクセスする権限のないコンピュータを不正に利用する行為」
として不正アクセス禁止法に引っかかるよー

・無線LANなど外部に公開される機器の暗号化方式の設定や
パスワード管理は徹底して行うようにしよう


それでは

今回はPython言語で機械学習用のUIが
サクサク作れるGradioについてです


解説動画はこちら






Gradioについて

機械学習用のモデルを一般の人が使うには
いちいちHTMLやJavascriptとかを書いて
適切なUIを実装しないと使えません


Gradio を使用すると
すべてPythonでデモを構築して
共有するところまでできちゃいます



導入方法

コマンドラインで
インストールコマンドを実行するだけです
pip install gradio



主なGradio操作方法

1.どこか作業用のディレクトリを用意する
2.ディレクトリ内にGradioのコードを書いた
 Pythonファイルを作る(app.py)
3.ターミナルなどからコマンドで実行する
 gradio ファイル名



サンプル起動用のファイル

デモサイトのソースです
sample.py

import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")

ファイルを作成したらターミナルを起動して
ファイルの有る場所に移動し
次のコマンドを実行します

gradio sample.py



アプリケーションが起動したら
以下のURLにアクセスすると見る事ができます

http://127.0.0.1:7860 or 7861
http://localhost:7860 or 7861

ポート番号は起動時にターミナルに表示されるので
それを入力しましょう

スクリーンショット 2023-07-08 16.57.27

こんな感じの画面が出たら成功です



Gradioの仕組み

デモソース
import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
gradioをimportして
gr.Interface でインターフェイスを作成します


画面に表示されるのがインターフェイスです
スクリーンショット 2023-07-08 16.57.27


インターフェイスは3つの必須パラメータで
初期化を行います

1 . fn: UIをラップする関数

2 . inputs: 入力に使用するコンポーネント
(例"text": 、"image"または"audio")

3 . outputs: 出力に使用するコンポーネント
(例"text"、"image"、 または"label")

関数の引数や戻り値は
対応する入力ソースの数や
出力するソースの数に合わせる必要があります

入力と出力、そして何をするかを関数で定義して
gr.Interfaceの引数に指定して実行するだけ
という非常にシンプルな作りになっています



コンポーネントについて

GradioではUI変更用にさまざまな部品が用意されていて
これを使用してさまざまなUIを作成することができます

部品のサンプルソースです
import gradio as gr

def greet(name, is_morning, temperature):
    salutation = "Good morning" if is_morning else "Good evening"
    greeting = f"{salutation} {name}. It is {temperature} degrees today"
    celsius = (temperature - 32) * 5 / 9
    return greeting, round(celsius, 2)

demo = gr.Interface(
    fn=greet,
    inputs=["text", "checkbox", gr.Slider(0, 100)],
    outputs=["text", "number"],
)
demo.launch()
スクリーンショット 2023-07-08 17.01.22

入力として
・テキスト
・チェックボタン
・スライダー
が配置されています

部品を配置してUIをサクサク作る事ができます

これらを簡単に作成出来るのも
Gradioの強みですね




サンプルアプリ

huggingfaceの画像判別モデルを使用して
画像判別を行うUIサンプルアプリです

今回は
huggingface/google/vit-base-patch16-224
というモデルを使用する事にします

サンプルアプリのソース
import gradio as gr

demo = gr.Interface.load(
    "huggingface/google/vit-base-patch16-224",
    examples=[
    "./images/ファイル名",
    "./images/ファイル名",
    ])
    
demo.launch()

事前に画像ファイルを用意しておき
imagesというディレクトリ の中に配置しておきます

examples の部分のファイル名を
正しく指定しておきましょう

こんな感じの画面が出ます


スクリーンショット 2023-07-08 17.05.54

画像ファイルをクリックして「送信」をクリックすると
画像の判別結果が右側に出る仕組みです

このように判別モデルなんかも
数行のコードで使う事ができてしまうUIが
簡単に作成できてしまうので
非常に便利です

作ったコードを
Google colabなどで配布すれば
簡単に共有も出来てしまいます


huggingfaceにモデルを置いておけば
どこでも使う事ができるので
オープンソースで公開を検討している場合は
非常にお手軽に使う事ができます



今回は機械学習用のUIが
サクサク作れてしまう
Gradio をご紹介しました

それでは

今回はPython言語で
簡単にGUIアプリケーションが作成できちゃう
「Flet」のご紹介です






Fletについて

Fletは、PythonでWeb, Mobile, Desktopの
アプリケーションを作る事ができる
フレームワークです

Flutter言語をベースに構築されており
クロスプラットフォームの
アプリケーション開発が可能になっています

Pythonだけで簡単に
GUIアプリケーションが作れちゃうので
かなり便利だと思います


導入方法

導入方法は至って簡単で
コマンドでインストールするだけです
pip install flet



主なFlet操作方法

ここからは簡単な操作方法についてです

1.どこか作業用のディレクトリを用意する
2.ディレクトリ内にFletのコードを書いたPythonファイルを作る
3.ターミナルなどからコマンドで実行する

python ファイル名

これだけでFletで作ったアプリを
動かす事ができます



Fletの仕組み

Fletをimportして「ft.app」で
main関数が呼び出されるとGUIが作成されます
import flet as ft

def main(page: ft.Page):
    pass

ft.app(target=main)

Fletアプリをブラウザーで起動させる場合は
「app」メソッドの引数を追加します
ft.app(target=main, view=ft.WEB_BROWSER)



Controlの追加

Fletで表示されるページは
「Control」と呼ばれるウィジェットになっているので
ここに表示するものをリストのように追加していきます
page.add(ft.Text('こんにちは:乙pyです'))

スクリーンショット 2023-06-24 16.48.04


テキストやボタンなど
部品を配置する事ができるようになっています



イベントハンドラ

ボタンなどのコントロールは
ユーザの入力で発火するイベントハンドラを
持つことが出来るようになっています

# イベントハンドラ
def button_clicked(e):
    page.add(ft.Text("Clicked!"))

page.add(ft.ElevatedButton(text="Click py", on_click=button_clicked))
スクリーンショット 2023-06-24 16.48.15






サンプルアプリ

Fletのgithubでサンプルアプリが公開されています

サンプルのリンク

スクリーンショット 2023-06-24 16.48.40
スクリーンショット 2023-06-24 16.48.25




どんなアプリかは
動画の方を見てみて下さいね





結構簡単にアプリが作れるので
これからもどんどんアプリ作っていきたいと思います

それでは


 

このページのトップヘ