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やアプリケーションをあたかも実機上で動いているように見せる機構のこと。
実現方法として、ハイパーバイザを用いる仮想化ソフトウェアと用いない仮想化ソフトウェアがある。
ハイパーバイザを用いる仮想化ソフトウェアは、VMwareやHyper-Vなどが有名。
ハイパーバイザを用いない仮想化ソフトウェアは、QEMUが有名。
ハイパーバイザは、物理ホストと仮想ホストのCPUアーキテクチャが同一でなければならないため、例えば物理ホストがIntelのCPUなら仮想ホストでARMのCPUを載せることは出来ない。
ホストOS→仮想化ソフトウェア→ゲストOS→プロセスという感じで、プロセス起動までのオーバーヘッドが大きい。
- コンテナ
OS実行のリソースは不要であるため、仮想マシンに比べてオーバーヘッドが小さい。ホストOS→プロセスと直で動作させられる。
Linuxではnamespaceにより、プロセスやファイルシステムを分割できる。この分割したもの1つ1つがコンテナ。
ただ、このコンテナを実用できるようにするためには、その他にもネットワークなど様々な分割を行わなければならない。そのあたりを一括してやってくれるのがDocker。
コンテナは、仮想化ソフトを使わずゲストOSを立てることもなく、ホストOS上に分割したプロセス空間を作ることが出来る。
実践IT監査ガイドブック改訂版を読んだ(2章まで)
これまでIT監査とは無縁だったが、面白そうだったので読んでみた。2章までだけど。
1章 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リスク、財務リスク、コンプライアンスリスク、戦略・意思決定リスクがある。
法人間電子取引を円滑に行うための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の目的
経路情報を検証し、経路リークや経路ハイジャックを防ぐ。
仕組み
一言でいうと、経路情報が正しいものかどうか電子証明書によって検証出来る仕組みのこと。
- 検証の流れ
- RPKIにより、正しい経路情報が含まれたリソース証明書を発行
- リソース証明書の秘密鍵を用いて電子署名を行った、IPアドレスとAS番号の組み合わせデータであるROA (Route Origination Authorization)を作成
- ROAをリポジトリと呼ばれるサーバに置く
- AS運用者(BGPルータ等)は、自身が所有するASの経路情報とリポジトリのROAを比較して、正しいかどうかを検証する(ROV (Resource Origin Validation) )
JPNICのRPKIシステム
rpki.nic.ad.jp