uma3blog

気が向いたことを稀になんかいろいろ書きます。

OverTheWire Wargames Banditを10まで解いたWrite up

http://overthewire.org/wargames/bandit/

0~10まで解いてみました。

 

・Bandit0

readmeを読むだけ。cat readmeで終わり。

 

・Bandit1

ホームディレクトリに"-"というファイルがあるのでcatするだけ。

 

・Bandit2

スペースを含むファイルを読む。""で括れば良い。

cat "spaces in this filename"

 

・Bandit3

頭に"."がついたhiddenファイルを読む。

hiddenファイルはlsコマンドに-aオプションを付ければ見れる。

inhereフォルダの中に.hiddenファイルがあるので読むだけ。

cat inhere/.hidden

 

・Bandit4

バイナリファイルのなかに1つだけtextファイルが有る。

fileコマンドを使って見ていくと、-file07だけがASCII textだった。

なお、ファイル名の頭に"-"がついているので、catする際はコマンドとして認識されないように"--"をつける

cd inhere

cat -- -file07

 

・Bandit5

下記条件なので、findコマンドにsizeとreadableオプションつけて実行。

  • human-readable
  • 1033 bytes in size
  • not executable

maybehere07/.file2がヒットするのでそれを読む。

cd inhere

find -size 1033c -readable

cat maybehere07/.file2

 

・Bandit6

下記条件なので、findコマンドにsizeオプションとgroupオプション、userオプションを付けて実行。

  • owned by user bandit7
  • owned by group bandit6
  • 33 bytes in size

色々出て来るが、頭にfind:が付いていないファイルが1つだけ見つかるので、それを読む。

find / -size 33c -user bandit7 -group bandit6

cat /var/lib/dpkg/info/bandit7.password

 

・Bandit7

大量の文字列があるテキストファイルからパスワードを探す。

パスワードは"millionth"の隣りにあるよとのことなのでgrep

cat data.txt | grep "millionth"

 

・Bandit8

大量の文字列の中で本当のパスワードは唯一重複無しとのことなので、uniqで1回しか出ないものを探す。

cat data.txt | sort | uniq -c

 

・Bandit9

バイナリファイル中の、いくつかの‘=’で始まる文字列がパスワード。

読める文字を探すため、stringsを使う。=は複数なのでとりあえず2つでgrep

strings data.txt | grep ==

 

・Bandit10

base64エンコード文字列があるのでそれをデコードするだけ。

cat data.txt | base64 -d

IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

コンテナと仮想マシンの違い

「コンテナって何?」って聞かれたときにどう答えればよいかがパッと思いつかなかったので、整理のために仮想マシンとの比較で軽くまとめました。

仮想マシンとコンテナの違い

マシン全体を仮想化して、その上で動作するOSやアプリケーションをあたかも実機上で動いているように見せる機構のこと。
実現方法として、ハイパーバイザを用いる仮想化ソフトウェアと用いない仮想化ソフトウェアがある。
ハイパーバイザを用いる仮想化ソフトウェアは、VMwareHyper-Vなどが有名。
ハイパーバイザを用いない仮想化ソフトウェアは、QEMUが有名。
ハイパーバイザは、物理ホストと仮想ホストのCPUアーキテクチャが同一でなければならないため、例えば物理ホストがIntelのCPUなら仮想ホストでARMのCPUを載せることは出来ない。
ホストOS→仮想化ソフトウェア→ゲストOS→プロセスという感じで、プロセス起動までのオーバーヘッドが大きい。

  • コンテナ

OS実行のリソースは不要であるため、仮想マシンに比べてオーバーヘッドが小さい。ホストOS→プロセスと直で動作させられる。

Linuxではnamespaceにより、プロセスやファイルシステムを分割できる。この分割したもの1つ1つがコンテナ。
ただ、このコンテナを実用できるようにするためには、その他にもネットワークなど様々な分割を行わなければならない。そのあたりを一括してやってくれるのがDocker。


コンテナは、仮想化ソフトを使わずゲストOSを立てることもなく、ホストOS上に分割したプロセス空間を作ることが出来る。

実践IT監査ガイドブック改訂版を読んだ(2章まで)

これまでIT監査とは無縁だったが、面白そうだったので読んでみた。2章までだけど。

1章 IT監査

IT監査とは

本書において広義の「IT監査」とは,「ITを対象とした監査」および「ITを利用した監査」の2つを含むものとして定義する。

本書ではIT監査=システム監査として扱う。

システム監査の目的は、経済産業省の「システム監査基準」(2018)に以下の通り記されている。

  1. 情報システムのガバナンス、マネジメント、コントロールの適切性等の保証・助言
  2. 情報システムのリスクに関する評価等を通じた経営目標達成への貢献

IT監査については、色々な基準により示されている。

2章 ITリスクとリスクマネジメント

リスクとは

ISO 31000によれば,「effect uncertainty on objectives(目的に対する不確かさの影響)」と定義されている(日本語訳は,JIS Q 31000:2019に基づく)。

これも色々なところで定義されている。

  • JIS Q 31000:2019(ISO31000:2018)
  • NIST SP800-30
  • COBIT 5 for Risk
ビジネスリスク

大きく分けて外部リスクと内部リスクがある。

  • 外部リスク

業界内の競争、市場の需要の変動、政治情勢、法規の改正、資本調達や金融市場の変動などによるリスク

  • 内部リスク

組織内で生じるリスク
業務リスク、ITリスク、財務リスク、コンプライアンスリスク、戦略・意思決定リスクがある。

ITリスク

企業において様々なリスクが存在するが、これをマネジメントする方法として、リスクの「特定」「分析」「評価」の3つプロセスが行われるリスクアセスメント、それに対するリスク対応がある。
リスクの特定において、事業の妨げとなりうるリスクを全て洗い出す。
リスクの分析において、リスク=発生確率×影響度とし、その大きさをマトリックス等で示す。
リスクの評価において、リスクの大きさを識別する。
そして、これらのリスクをどうするか(回避、移転、受容、低減)の対応を行う。

法人間電子取引を円滑に行うためのeシールという仕組みが出てきそう

eシールに係る指針(案)、総務省、2021年
https://www.soumu.go.jp/main_content/000748208.pdf


これまで紙で行われていた法人間での書類のやり取りを、電子的に行えるようにする”仕組み”。

現在、多くの書類は電子的にやり取りするようになったものの、重要な契約書類などは紙で行っていることが多いと思う。これをeシールを使うことにより、書類の改ざんや書類送信者のなりすましを防止する仕組みを入れることで、重要書類のやり取りも電子的に行えるようにする。

ただし以下の通り、注意書きあり。

ただし、eシールは、あくまでも電子文書等が発行元の組織等から間違いなく発行されたことを示すためのものであり、当該電子文書等の内容が正しい 内容であるかどうか、また、当該電子文書等の発行元の組織等が正当な組織等であるかどうかを保証するものではないことに留意が必要である。


なお、eシールは法人間やり取りで使うものなので、個人間では用いることを想定されていないようです。


これによって、どんどん紙が無くなってくれると嬉しいですね。
でも本は紙媒体で読みたい派です。

E資格受験結果

合格でした。

受験日が2/19で、結果発表メールは3/11に着弾。
受験~結果発表まで約3週間かかりました。

得点率はこんな感じでメール通知されました。
■分野別の得点率
応用数学:50 %
機械学習:67 %
深層学習:64 %
開発環境:92 %

全体得点率は68.25%で、合格ラインは非公開ですがおそらく結構ギリギリの合格です。


今回は(も?)受験日が2/19(金)、2/20(土)の2日間しか指定されず、最寄りのテストセンターでは約1ヶ月前の1/18に予約して土曜日が満席で予約できずでしたので、受験する人はなるべく早めの予約が必要そうです。
私は金曜日の昼間に受験しましたが、他にE資格を受けている人は結構いました。


内容は講座の問題集や模試と同様の問題が出ました。ただ、全く同じというわけではないですし、それなりにレベルも高いので、私のような仕事でAI関連全く触らないような人には事前勉強は必須です。


ちなみに私はSTANDARD社のe-learning講座を受講しました。
質問に対するレスポンスは早かったですが、講座の資料や問題集等に誤字脱字が結構あったりしました。
他のところもこんなものなんだろうか。
まぁそれを間違いだと指摘することで知識は定着しやすいですが。
講座自体は、分野が応用数学情報理論機械学習、深層学習とあり、中でも機械学習と深層学習は学習量が膨大でこれ全部身に付けとけばE資格くらいは合格だろうというものです。基本的にPythonで実装しながら学びます。



私はAI関連の業務をしていないのでよく分かりませんが、講座を真面目に受けてE資格を取得できるくらいになっておけば、AI関連業務、特に機械学習エンジニアとして業務を行うための基礎中の基礎は出来たかなという感じです。データサイエンティストを目指すのであれば、E資格に加えて、統計モデリングなどもっと理論面を勉強したほうが良いかなという印象を持ちました。

E資格に向けての勉強(RNN)

Recurrent Neural Network
系列(シーケンス)データを解析する。
系列データに時間の概念があるのが時系列データで、株価予測とかに使われる。
時間の概念がないものは、自然言語処理などに使われる。
前回の隠れ層を入力に使用するので、過去の入力が考慮される。
記憶を長くしようとすると勾配消失が発生する問題がある→LSTM、GRUセルで解決

  • LSTM

中間層をLSTM Blockというものに置き換えることで、各10ステップ程度しか記憶できなかったのが1000ステップ以上記憶できるようになった。

LSTM Blockは下記の構成要素で成り立っている。

メモリセル(CEC;Constant Error Carousel)
過去の情報を記憶する。

入力ゲート
入力層からの入力を取捨選択する。

出力ゲート
隠れ層からの入力を取捨選択する。

忘却ゲート
不要な記憶をメモリセルから消去する。

各隠れ層はLSTM Blockに置き換えられる。つまり隠れ層の数だけLSTM Blockが存在する。

  • GRU

LSTMよりも単純で計算効率が良い。


  • その他RNNに関係のある用語

WaveNet
音声合成や音声生成などに使われる。
Sequence-to-Sequence (seq2seq)
自然言語処理タスクに使われる。Encoder-Decoderモデルにより、系列データを別の系列データに変換する。
Transformer
自然言語処理タスクに使われる。RNNやCNNは使わず、Attentionだけで高精度を達成。

RPKI (Resource Public Key Infrastructure) の話

ルーティング(BGP)セキュリティ関連用語であるRPKIについて簡単にまとめた。


背景

インターネットには大元となる管理組織が存在するわけではなく、各ASがBGPにより相互に接続されているピアツーピアなネットワークである。
ASは他のASから広告されてきた経路情報(IPアドレスとAS番号)を受け取り、自身の持つ経路情報を更新および経路制御を行っている。
ASはこの広告されてくる経路情報が何であろうと受け入れてしまうため、意図しない範囲まで経路情報を広告してしまう経路リークや、故意に誤った情報を広告する(Mis-Originationと呼ばれる)経路ハイジャックが発生し得る。

RPKIの目的

経路情報を検証し、経路リークや経路ハイジャックを防ぐ。

仕組み

一言でいうと、経路情報が正しいものかどうか電子証明書によって検証出来る仕組みのこと。

  • 検証の流れ
  1. RPKIにより、正しい経路情報が含まれたリソース証明書を発行
  2. リソース証明書の秘密鍵を用いて電子署名を行った、IPアドレスとAS番号の組み合わせデータであるROA (Route Origination Authorization)を作成
  3. ROAリポジトリと呼ばれるサーバに置く
  4. AS運用者(BGPルータ等)は、自身が所有するASの経路情報とリポジトリROAを比較して、正しいかどうかを検証する(ROV (Resource Origin Validation)

JPNICのRPKIシステム
rpki.nic.ad.jp