セキュリティエンジニアにとってのプログラミング
お待たせしました。
週末、風邪でダウンしてしまった蔵本です。
久しぶりにしんどかったのですが、たくさん食べてひたすら寝たら回復しました。
今週の一枚は、蔵本家の実家ご飯です。
「タケノコとワカメの炊いたん」と「なっぱの炊いたん」ですね。
両方とも暖かいのもうまいですが、一晩寝かせて冷えた状態のがまたうまいんですよねぇー。
しかし、東京にきて、「しろな」が手に入らず苦慮しております。。。。
さてさて、今週はセキュリティエンジニアにとって、プログラミングが必要か?というお題です。
セキュリティエンジニアは、非常に高度かつ広範囲の知識が求められます。
当然ですが、プログラミングに関しても「分からない」「知らない」は許されません。
プログラミングは、コンピュータがどう動くのか?を理解するには、必須のスキルだからです。
私のかつてのボスで、よく洗濯機を例に出す人がいたので、それにならってIT関係の人を分類してみましょう。
1.洗濯機の特長を説明できる人
2.洗濯機の使い方をマスターしている人
3.洗濯機の内部動作を理解している人
ざっくりと上記3つに分類すると、1.が営業、2.がプリセールス、3.がエンジニアになりますね。セキュリティエンジニアは、当然、3.である必要があります。これは、コンピュータでいうと、APIレベルでの動きの把握と同等です。(ちょっと強引ですかねw?そういう事として、読んでくださいw)
そして、このレベルでプログラムの動きを捉えようとすると、C、C++、アセンブラ、少しの機械語の知識が必須と考えています。また、多くのOSは、C系の言語で書かれているので、C系は特に必須なのですが、ここさえクリアすれば、プログラムが動いているのを見ると、APIの流れが頭に浮かんでくる、立派な職業病になる事ができます。ここで言うC系は、アルゴリズムをひたすら書いていくようなプログラムではもちろんダメで、WindowsプログラミングやLinuxプログラミング等、OSが実装しているAPIやシステムコールを利用したプログラングを行う必要があります。ランタイムや、フレームワークのプログラミングだけいくらこなしても、内部コールを理解していない状態では、大事なところが欠けてしまいます。
で、機械語ですが、セキュリティをやっていて、良く目にするのは、0×90つまりNOP (No OPeration)でしょう。
この命令では、文字通り何もしません。
昔、メインフレーム時代に、条件分岐をNOPで上書きする事もあったようですが、現在でもプログラムを固定長にするためにパディングしたり、悪い事を考える輩がプログラムを改ざんする際に使用したりします。
アプリケーションは、ハッシュをチェックしてやって、改ざんされていない事を確認しよう!とよく言われますが、ハッシュチェックまでやっている人は、実はあまり見た事がありません。しかしプログラムって実は簡単に改ざんできてしまうんですね。
次回は C 、アセンブラ、NOPを使って、自作のプログラムをデバッグして、ちょこっと改ざんする事で動きを変えてみましょう。
ほんとにちょこっとです。
※当たり前ですが、自作のプログラム以外を逆アセンブルしたり、勝手にデバッグしないでください。
※こちらも当たり前ですが、改ざんを推奨するものではありません。
それでは、数日後をご期待ください!