【技術本】セキュリティエンジニアのための機械学習
https://amzn.to/3IxdNgm
【技術本】セキュリティエンジニアのための機械学習
へポスト
以下の各種情報セキュリティに対する機械学習を活用した防御と、攻撃の内容について、コードを踏まえて解説してくれている。
・フィッシングサイトの検知:特徴量=フィッシングサイトのURLにIPアドレスが含まれるか、などを利用
・迷惑メールの検知:特徴量=単語の出現頻度、逆文書頻度(単語の希少さ)
・マルウェア検出
ファイルのメタデータに着目>PEヘッダを解析
Androidマルウェアの検出:アプリの要求パーミッション情報を特徴量とする
ディープラーニングによるマルウェア検出
CNNを利用し、マルウェアを画像化して分類する
マルウェアのAPI呼び出し履歴を時系列データとしてLSTMモデルで分類
時系列分析を活用し、時系列データを傾向変動、循環変動、季節変動、不規則変動に分類して異常値をみつける
・SQLインジェクションの検知:特徴量=通常リクエストとSQLインジェクションのエントロピー(複雑さ)の値を関数で算出。また、特徴ある文字列(括弧)などが利用されているかも特徴量とする。
・機械学習システムへの攻撃
転移(訓練データやモデルパラメータ窃取)
回避(分類の穴をつく)
汚染(訓練データに不正なデータを与える)
サンプルコードはGoogle Colaboratory上で動作可能なので、実装とドキュメントを辿りながら実行結果が観れてよい。今後の機械学習プログラムサンプルのスタンダードになりそう。しかし、Google ColabでGPU使用時間制限が最近仕様変更で追加された。GPU利用するとすぐに制限がきてしまうので、ハードウェアアクセラレータはなしを選択が無難。
情報セキュリティにおいて機械学習を適用した防御方法についての足がかりとなる知見を学べる良著。翻訳もすっきりとした日本語文体で読みやすいです。
--------
以下、内容メモ
1章:情報セキュリティエンジニアのための機械学習入門
ウィルス対策ソフト:機械学習エンジン搭載
既知マルウェアのメタデータを学習し、既知の検体に相似したファイルを検出
侵入検知システム:
平常時の通信状況を学習し、異常通信を検知
迷惑メール対策:ベイジアンフィルタリング
これらの機械学習を活用したソフト
検出に使用している特徴量>ベンダーがブラックボックスにしている
機械学習の知識があれば、それらを推定でき、こららのソフトを扱う場合での問題(誤動作など)解決に役立つ。
使用する主なpythonパッケージ
● NumPy
● SciPy
● LightGBM
● TensorFlow
● Keras
● pandas
● MatplotLib
● scikit-learn
● optuna
GoogleColaboratory:
ハードウェアアクセラレーティング設定も可能
GPU:
TPU:Tensor Processing Unit
変更方法(ランタイムの変更):
ノートブックの設定>ハードウェアアクセラレータのプルダウンメニュー
OSコマンドの記述方法:!の後にコマンドを記述。例:!ls
機械学習を使ったモデル開発のステップ
データセット作成>データセットの読み込み、前処理>
探索的データ分析・特徴量エンジニアリング>モデルの訓練と評価(品質向上で反復)>デプロイ
--------
2章:フィッシングサイトと迷惑メールの検出
フィッシング、迷惑メール:全てを検出することができない
新しい防御手段が必要
●フィッシングサイト検出器
・ロジスティック回帰を使用した検出
ロジスティック回帰:二項分類に使用される統計的手法
UCI MAchine LEaring Respositoryのデータセットを利用
特徴量:フィッシングサイトのURLがIPアドレスを使用している
ハイパーパラメータの調整:チューニングツールを使用
手動では経験と勘による属人性が高くなるため
scikit-learn GridSearchCV: 総当たりで時間かかる
本書では、Preferred Networksのoptunaを使用
陰性:真陰性TN、偽陽性FP
陽性:偽陰性FN、真陽性TP
正解率Accuracy = (TP+TN)/(TP+TN+FP+FN)
適合率Precision(誤検知しない割合)=TP/(TP/FP)
再現率Recall(見逃さない割合)=TP/(TP+FN)
・決定木を使用した検出
●迷惑メール検出器
自然言語で記述したデータの分類と検出要求
NLP概論
Natural Language Processing:人間の言語を機械で分析して理解する技術
非構造データ:あらかじめ定義された方法で整理されていないデータのこと
電子メール、ツイート、LINEのメッセージ、録音内容
NLPの分野
・自然言語理解
・自然言語生成
NLPをつかった開発の手順ん
・文章を単語に分解
・含まれる単語とその関係性を分析
・文章の意味を確認
・連続した文章の意味を分析
・語用論的分析を使って終了する
Enron-spamデータセットを使用
単語の出現頻度、逆文書頻度(単語の希少さ)をもとにデータをベクトル化
一般単語は分析から除外する設定>一般的な単語は検出器の性能に寄与しない
検出器にLightBGMを使用
ハイパーパラメータ調整にoptunaを使用
検出器の特徴長を調査>subjectという単語が検出に寄与していることがわかる。
特定の非迷惑メールにsubjectがたようしていたためと思われる
逆に、subjectを多用した迷惑メールを作れば、検出を逃れられる可能性が出てくる。
>ホワイトボックス攻撃
--------
3章:ファイルのメタデータを特徴量にしたマルウェア検出
マルウェア解析
・表層解析
マルウェアを実行することなく解析>ウィルススキャン
プログラムのハッシュ値で、関連情報を検索
プログラムから文字列を抽出>怪しい接続先、怪しい文字列など
PEヘッダを解析
・動的解析
安全な環境(サンドボックス)で実行して、感染動作を記録し、機能を明らかにする
プロセス、通信、DNS、作成ファイル、書き込み、読み込み、削除など
PowerShellなどのスクリプト実行有無、APIの呼び出し状況ななど
・メモリ解析
ファイルレスマルウェア>検出にはメモリ解析が必要
>メモリダンプ:ツール Volatility3
Volatility3の情報
コマンド履歴、RootkitによってfookされているAPI有無、通信情報
プロセス一覧・プロセスダンプ、プロセス中にインジェクトされたマルウェアダンプ
カーネルにロードされているモジュール一覧
マルウェアの検出回避手法
・難読化:検出、解析を困難にする。デッドコード挿入、暗号化など
・ファイル寄生:正規ファイルなど単一ファイルにマルウェアを寄生
・パッキング:自己解凍形式>圧縮コードにより検出の回避
PEヘッダを使った機械学習によるマルウェア検出
PEヘッダ:
32,64bitのウィンドウズで使用されている実行ファイル、DLL,オブジェクトコードなど
で採用されているファイル形式。これらには、インポート、エクスポート、タイムスタンプ、サブシステム、セクション、リソースなどマルウェアに役立つ情報が含まれている。
Python pefileパッケージ>
PEヘッダのシグネチャ生成、ヘッダ確認、セクション分析、データ取得
p52:誤植:最大値(minumum) > (maximum)
matplotlibのグラフ表示視覚化により、正規ファイルとマルウェアの特徴量を比較する
例:versionInformationSize:正規ファイルは15以下はほとんど存在しないが、マルウェアには存在している
例:majorSubsystemVersion:6以下のマルウェアしか存在しない
アルゴリズム
・ランダムフォレスト
ファイルのメタデータを特徴量にしたマルウェア検出
>重要度の高い特徴量のみをExtraTreesClassifierで抽出
・勾配ブースティング
重要度の高い特徴量をGradientBoostingClassifierで抽出
・AdaBoost
重要度の高いAdaBoostClassifierで抽出
Androidマルウェアのデータセットを使った検出器の開発:
>パーミッションを特徴量とする
>AndroidMAnifest.xml
インターネットアクセス、電話の状態確認、SDカードへのアクセスをマルウェアの多くが要求している
--------
4章:ディープラーニングによるマルウェア検出
パーセプトロン
ニューラルネットワーク
活性化関数
PEヘッダを使用したディープラーニングによるマルウェア検出器の開発
liefライブラリを使用:ウィンドウズバイナリ以外にも、Linux用ELFバイナリ、MachO,DEXなどのフォーマットも取り扱える
特徴量エンジニアリングにて、研究論文よりPEヘッダのうち7つの要素を提案しており、これらをliefを使って抽出してみる。
特徴量の標準化:異常な大きな値があるとニューラルネットワークの訓練がうまく進まない場合がある。scikit-learnのpreprocessingパッケージのStandardScalarクラスで特徴量の標準化を行う
kerasを使ったディープラーニングモデル
optunaで特徴量チューニング
畳み込みニューラルネットワークとマルウェアの画像化を使用した分類
CNN:幅、高さ、奥行きを特徴とする3次元構造を特徴量としている
RNN:シーケンスの要素ごとに同じタスクを実行し、前回の計算結果に応じて出力を行う
>短期記憶を持つ
・マルウェア検知とCNN
マルウェアを画像に変換することで、CNNへの入力が可能になる。
マルウェアのAPI呼び出し傾向から検出する方法
マルウェアのAPI呼び出し時系列履歴情報を利用する
LSTMモデル(長・短期記憶をもつ,RNNの一種)による機械学習モデルで学習し検出する
--------
5章:データセットの作成
サイバー脅威インテリジェンス情報からの収集と自動化
Twitterを通じた脆弱性情報データセットの作成
>twitterのスクレイピングで収集
データのラベリングサポート:PigeonXTパッケージ
--------
6章:異常検知
異常の分類
・点異常:ここのインスタンスが他のデータと比較して異常
・文脈異常:特定の文脈(時間帯や地域)において異常
・集合的異常:個々のインスタンスは以上でないが、集合として現れると異常
SIEM:セキュリティ対策機器からのログを収集して一元管理>楼観分析
UEBA:PCのエンドポイントログを収集>さらに詳細な単位の分析
>これらの異常検出アルゴリズムは機械学習で採用されている
時系列分析による異常値検出
・傾向変動:上下を伴う中長期的な変動=トレンド
・循環変動:経済分野において12ヶ月を超える循環。ほぼ一定周期を持つ変動=サイクル
・季節変動:季節ごとに同じ強さで繰り返される一年周期の変動
・不規則変動:上記3つでは説明がつかない。ノイズ。
データセット:PCへのログオンに関するログ
データを整形し、移動平均の折れ線グラフで視覚化
さらに、データをトレンド・サイクル、季節変動、腹側変動の3つに分割
Prophetによる異常検知
最終的にPCへのログオンに関するログデータから、以上のある行を抽出する
--------
7章:SQLインジェクションの検出
・通常のHTTPクエリ文字列のエントロピー(複雑さ)分布をグラフで視覚化
・SQLインジェクションのHTTPクエリ文字列のエントロピーをグラフで視覚化
>SQLインジェクションの方が、エントロピーが高く偏りがある
・SQLインジェクションに特徴的な文字の抽出
>SQLインジェクションの90%以上が閉じ括弧を含んでいる傾向
これらを特徴量として追加
N-gramによる特徴量の再抽出
N文字ごとに分割する自然言語処理で用いられている手法
1文字ごと=ユニグラム
2文字ごと=バイトグラム
3文字ごと=トライグラム
>ドメイン知識(専門領域の知識)がなくても検出できる手法
--------
8章:機械学習システムへの攻撃
訓練済みのモデルの運用に関する攻撃
・転移攻撃:transfer
訓練データに関する情報、モデルのパラメータを窃取する
・モデル抽出:学習モデルが既知の場合、モデル出力からそのパラメータを抽出する
・モデル反転:モデルの出力とともに、訓練データに関する情報を復元
・メンバーシップ推論:モデルの出力を元にあるデータが訓練データに含まれてるか特定する
Copycat CNN
・回避攻撃:evasion
訓練済みのモデルに正しく分類されないデータを生成する攻撃
>パンだと認識される画像に特殊なノイズを加えてテナガザルに誤認させるサンプルは有名(ググる)
FGSM
Carlini & Wagner Attack
Zoo Attack
Adversarial Training
Randomized Smoothing
・汚染攻撃:poisoning
訓練中、訓練済みのモデルに不正なデータを与え、モデルの制度を低下させる
BadNets
Activation Clustering
--------
9章:深層強化学習によるマルウェア検知器の回避
攻撃者が、機械学習モデルのセキュリティシステムの特徴量を特定(例えば、ある文字列
が多いと良性の某ソフトウェアに偽造できるなど)して、マルウェア検知器をかいくぐるという、機械学習システムへの攻撃
MalConv:畳み込みニューラルネットワークを用いたマルウェア分類機
pefileを用いたPEファイルの改変
OpenAI GymとKeras-RLを用いたMalConvの回避
--------
10章:機械学習のヒント
・どの機械学習ルゴリズムを使ったら良いのかの解説
・精度や指標についてどう考えたら良いのか
--------
付録A:練習問題の解答
以上。
へポスト
