暗黒面に堕ちたプログラマ
最近クラッキングの犯罪をちゃんと報道するようになったが、相変わらずマスゴミは見当違いをしているようだ。外からのクラックが問題なのではなく、中の人の犯罪こそが露見されていないのだから。
プログラム発注元は、ただ「安く品質が良ければOK」を繰り返すのみ。職務への忠誠心は警官並みのレベルが必要であるにもかかわらず、バックドアを [ つける | つけない ] については、プログラマとしての良心「だけ」に依存している。この現実を発注元は知らない。
地下鉄テロで日本を震撼させた某宗教団体は、プログラミングの請負をしていた。「安く早く仕上げる」ことで評判だった。請負元はその部品が混じっていないかで大騒ぎしていたことを忘れているようだ。自分が発注したシステムの孫請、曾孫、曾曾孫請まで押えることは、事実上不可能だ。
暗黒面に堕ちたプログラマは、上記の事実を承知の上で、「悪のプログラマ」と化す。リンク先では対策を2つ挙げたが、ここでは、こうしたプログラムを見分けるポイントを書く。J2SE を想定して書くが、他言語は適宜読み替えて欲しい。
ログを書き出すところをチェックする
ログ出しは外注化しやすい。ログレベル・ログ情報の仕様とインタフェースさえ決まれば他のチームや会社へ外注に出せる。助っ人にお任せする一方で、仕様どおりにできていれば、中身なんて気にされない部分でもある。
システム全体から見たとき、外部リソースへアクセスする部分は限定的だ。従ってセキュリティ関連なら、誰しも画面まわりや、ログイン機能、DBアクセス、セッション管理に着目しがちだ。これらは外からのアタックに備えてのものだ。ほとんどのプログラマはきちんと解決できる。誰かが「悪のプログラマ」だったとしても、机上デバッグで見抜くのはたやすい。
ところが、ログ出しの部分は見落とされがちだ。getUserObj() だとか、getPasswd() 、 getCookie() は、それぞれ別のクラスで実装されるだろうが、これらを一元的に眺めることができるのは、ログ出力機能だ。
回避策としては、ログ出しの仕様を限定するとか。純粋にログ情報のみを受け取って書くようにする。「他システムから渡されたユーザー情報が原因でエラーとなる場合があるので、ログ出力に UserObj を渡す」なんてことは、テストでは許されても、本番ではキチンと除かれているか、チェックしておく。
日時を取得している箇所を洗う
ポイントは2つある。日時を参照することが、その機能で本当に必要なのか? という面からチェックすることと、日時を取得する際にJ2SEスタンダードのクラスを使っているかどうか、という点。
夜間にバッチ的に動作する機能や、スナップショット的に性能を測る機能なら、日時を参照することは自然だろう。しかし、「その日時」に動く必要がなさそうなのに日時取得を実装している箇所があるのなら、要チェックだろう。クラックしたい情報を取る箇所と、その場所から外へ移す機能が書いてある箇所は別の機能として実装されているはず。情報を取る箇所は堅固に作るかもしれないが、取った情報を集めたりまとめたりするところは穴だったりする。そこを探すキーは「日時参照」「日時取得」だ。
一般に、日時や日本語に関する実装はプロジェクト内で統一的にしたいため、そのプロジェクト名を冠する呼び名で Calendar を継承するだろう。だから、その名で日時取得している箇所は比較的「危なくない」。ところが、自分で Calendar を実装して使っている箇所があれば要注意。
ベテランプログラマを疑う
冷や飯を喰らい煮え湯を飲まされているのが現状。プログラミングの喜びよりもむしろ、育成という名のもとデキナイ君の尻拭いをさせられているのが現状。イタズラ心から始める人はまれで、やるのならカクシンハン的に実行する。
暗黒面に堕ちるためには、まず「マスター」のレベルまで達しなければならないのは、どこの世界でも一緒。悪いコトするのにも誰かの書いたコードのコピペしかできないようなプログラマならば、その犯罪が露見するのも時間の問題。優秀なプログラマがまじめに取り組んだなら、まずバレない。
回避策としてペアプロが挙げられるが、通常の「シニア+ジュニア」の組み合わせではなく、中堅同士で組み合わせるのも有効(リソースの無駄遣いというそしりは免れないだろうが)。
--
侵入者ばかりを気にしているセキュリティくそくらえ。退出者こそ気をつけろ。映画「ダイ・ハード」のテロリストたちを覚えているか? 彼らは、包囲されたビルから逃げ出すために準備した乗り物は、「救急車」だ。出て行く者こそ気をつけろ。
May THE BUG be without you!

| 固定リンク
コメント