おおいわのこめんと


2016-06-20

[Security] Webとセキュリティとソフトウェア工学

超久しぶりに、かつ真面目な内容で更新です。

徳丸浩さんのTwitterでの

何度でも言うが、自力でトラブルシューティングできない人や組織は、自前でWordPres立ててはいけない / “一般ブロガーがAmazon Web Service(AWS)で独自ドメインのWordpressサイトを10分で作る方法…”
に対して、 山田さんの(恐らく)達観したコメント
「こうやってセキュリティが素人プログラマーや、見習いプログラマーを殺すんだろうなぁ。想像していたとはいえ、現実になってくると絶望しかない。」
を、 奥くんのコメント経由で見たわけです。

正直なところ、徳丸さんの元のコメントには100%同意で、山田さんもわかった上での達観なんだと思うのです(少なくとも「批判」ではないと思う)が、 ソフトウェア科学→セキュリティ→ソフトウェア工学 と仕事がどんどん移ってきた人間として、色々と思うところはあります。

90年台に日本で民用 Internet の黎明期を見てきた人間は、自分自身も含めてアリアハンで「ひのきのぼう」でスライムを倒しながら経験積んできてるんですよね。 そういう思いからすると、「危ないから銅の剣で外を素人が歩くな」というのは心情的には悲しいのですが、 そうは言ったって、外をドラゴンとかが跋扈している状況じゃ、仕方がないってものです。RPGと違って人に迷惑かかりますし。 で、本当の問題は「銅の剣」の部分だと思うのです。

個人的には、今のWebや組込みシステムや制御システムのセキュリティ問題の根幹に、 「システム全体の複雑度の増加に対して、ソフトウェアの作り方の工学の発展が全くフォローしていない」 ことがあると思っています。 外部との界面や外部からの攻撃も多様化し、ソフトウェア自身の機能も大幅に増えて複雑化していて、「正しいソフト」を作るのすら大変になってきているのに、 それを支えるソフトウェアセキュリティの機構はというと、せいぜいCからJavaやPythonやRubyに変わったことで、バッファオーバーランを防げるようになったくらい。 規模の問題の方はOOPなりフレームワークなりアジャイル+テストファーストなり、それなりに頑張ってきたと思うのですが、セキュリティに関しては正直、「銅の剣」か「たけやり」レベルと思っています。*1 WAFとか「被せる」「監視する」タイプの防衛策は進展していますが、振る舞いベースの「攻撃らしい」「攻撃らしくない」判別タイプの検知は、有効性はすごくあっても本質的な「バグに対する解決」ではないわけです。

以前から情報漏えい事故とかでも気になっているのですが、Unixローカルシステムの頃はアカウントの概念がシステムにあって、アプリの動作と関係なくシステム側でファイルの所有権は管理していたのに対して、 Webになって認証もアプリ動作も複雑になったのに、データは DB のシステムアカウントに全部フラットに格納して*2、アプリケーションのロジックだけでアクセス制御をするようになった辺りから、 なんか「退化しているんじゃないか」という気はしているのです。 もちろんUnixの機構をそのまま使えって意味ではなく、同じレベルのアクセス制御をちゃんとWebシステムの根底に設計して入れるべきではないか、という意味です。

自分自身が趣味ベースでのソフトウェアを昔ほど書かなくなったのも、敵をよく知っているからこそ、趣味ベースで銅の剣では戦う気にならなくなってしまったわけで。 商業ソフトを書いている人たちは素直にすごいと思いますが、Lv99の人たちが銅の剣で「戦えてしまっている」が故に、それでよし、となってしまっている面もある気がしています。

今本当に必要なのは、ちゃんと初級者(20年前の自分のレベル)でも当時と同じくらいには安全なシステムを作れるような、ソフトウェア工学的に本質的に「高性能な武器」を、ちゃんと考えて開発することなんじゃないかと思います。 「Lv1の勇者がいきなりドラゴン倒せる武器ってどんなもんだ」って感じですけど、どちらかというと必要なのは「よろい」の方かな。 これはLv1の入門者だけじゃなくて、Lv99の熟練者にとっても、本質的なプログラムをいかに安く快適に正しく作れるか、という意味で重要だと思うのです。 もちろん「何となくシステムがセキュリティを守ってくれるもの」というのではなく、「自然とセキュアな正しいプログラムが書ける」もの、という方向性であるべきです。 こういう事を言うことは、セキュリティ兼ソフトウェア科学兼ソフトウェア工学 というラベルになってしまった自分の仕事を増やすだけなんですけど、 プログラミングが好きでこの世界に入った人間として、プログラミングが楽しくない状況は素直に悲しいので、職業としてというよりも、一探求者としての研究者として、「何とかしたい」という思いはあります。

*1 セキュアプログラミングとかの best practice 系はそれなりに蓄積がありますが、RPGの例えで言えばどちらかといえば「訓練でLvを上げて、竹槍でドラゴン倒しましょう」の方向だと思うのです。

*2 DB暗号化はありますが、アプリ作成者側の認証と結びつくものはあっても、アプリ利用者側のアカウント等と紐ついたりするものは、なかなか「欲しいもの」が見つかっていません。


2014-04-14

[Misc] Radix Economy の話

仕事でなんとなく3値論理を調べていて、 「そういえば3進法(非整数でも良ければ e 進法)が数学的には最も効率がいいって言うんだよなぁ」 と思いだしてしまったのが事の発端。

Radix economy といって、端的に言うと

b 進法で、各桁の表現に b のリソースを要求されるとき、大きな数字を表現するのに漸近的に最もリソース利用効率がいいのは何進法か。

という問題で、上のページを見てもらうとわかりますが比例係数が \[b / \log b\] になるので、この最小値が \[b = \mathrm{e}\] のとき、整数では \[b = 3\] になります。4進法で1桁当たり信号線4本を使うのと、2進法で1桁当たり信号線2本を使うのが同じ効率になるのも、理解できます。

でも、上のページでは色々と初期の計算機の話が書いてあったりするのですが、 現代の普通のコンピュータでは2進法のほうがどう考えても効率がいいよな、と思ってしまったわけです。 それで、なんでこんな結果が出ているのかなと考えたら、 結局は「(少なくとも現代のコンピュータでは)2進法の使うリソースは1ビット当たり2本ではなく1本」で、「信号がない」ということに情報を割り当てているから差が出るわけです。

さて、それではどう直すかなのですが、現代的な情報量の概念を入れて1桁あたり \[\log b\] のリソース消費とかしたら、全く計算の意味がないわけです。元の定義の気持ちを生かしつつ、2進法について辻褄が合うことを考えると、とりあえず元の定義に一番近い修正としては、 「『0 = 信号なし』で表現できるので、\[n - 1\] 本の信号線で十分」 と直せそうです。例えば3進法の場合、「1」「2」の2本の信号線があって、何もなければ0という意味。あきらかに2進法に都合の良い設定ですが、とりあえずの変更としては妥当じゃないかなぁ。

さて、これで計算やり直してみますか、と思いついたのが運の尽き。計算の誘惑にズブズブとはまっていきます。久々にやると楽しいね(笑)

先ほどの Radix economy の計算式は、

\[E(b,N) = b \lfloor \log_b(N) + 1\rfloor \sim b \log_b N = \frac b{\log b} \log N\qquad(N \to \infty)\]

だったのですが、これを

\[E^-(b,N) = (b - 1) \lfloor \log_b(N) + 1\rfloor \sim (b - 1) \log_b N = \frac {(b - 1)}{\log b} \log N\qquad(N \to \infty)\]
と書き換えて、\[\log N\] を取り去って定義域を実数化した \[f(x) := \frac{x-1}{\log x} \quad (x > 0)\] の増減を考えます。Gnuplot にかければ一発じゃん……とか言わずに。 (計算の続きを読む) ...

……ふぅ。間違えてないよなぁ(こっそり Gnuplot にグラフ書かせてそれらしいことは確かめている)。久々の計算なので、ドキドキしながら増減表。

\[\begin{array}{c|cccc}
x & +0 & & 1 & \\\hline
g'(x) & -\infty & - & 0 & + \\\hline
g(x) & +\infty & ^+\searrow & 0 & \nearrow^+ \\\hline
f'(x) & +\infty & + & (1/2) & + \\\hline
f(x) & (0) & \nearrow & (1) & \nearrow
\end{array}\]

はい、結局のところ、単調増加です。この設定では1進法は「無限桁必要で各リソース0」という意味のないケース(そもそも極限はあるけど値は未定義)なので、2進法が最適効率になります。

グラフ

グラフ書いてみました。まぁあまりに2進法に有利すぎる設定ですが、 その上もずーっと単調増加なのはわかったかなと。

逆に考えると、非同期式計算機の実現方法の中には、2進法での0信号線と1信号線が別々に用意されている(「計算中で未確定」という状態を、両方0で表す)ものがあるので、そういう場合はやっぱり3進法が若干効率が良い、ということにもなるのですね。


2013-10-12

[Misc] 関西転勤

あー、わざと意味ありげに書いた前のエントリからもう半年経ってる……。 日記もTwitterもすっかりご無沙汰になっていて、もう皆さん存在を忘れられているのではという気になっていますが。申し訳ありません。

実は5月1日から関西・尼崎に転勤になっています。産総研関西センターにある、セキュアシステム研究部門のシステム検証関係グループのマネージメントのため、一時的に大阪に移りました。グループのメンバーは知っている人も多いので、そこはあまり困らず。1年超えたあたりで、一応つくばに戻る「予定」です(「予定とは未定の意味」とはよく言ったものですが)。

いろいろな手続きから賃貸契約・解約から引越しから、どたどたと4月頭から準備して、ゴールデンウィークを使って移動しました。引越し屋さんによると、5月頭は、4月にとりあえず単身転勤した人が家族を呼ぶ時期だったりして、なかなかのハイシーズンだったそうです。引越し代むちゃくちゃ高かった……。

で、大阪ぐらしですが、正直あまり遊んでません(苦笑)。初めての関東圏離脱ですが、まぁ街は住めば都で、長期間根を下ろすとまた印象が変わるかもしれませんが、居候としては意外と何とかなる印象。

で、もうそろそろ半年ですが、もう出張で17回も東京に戻ってるんですよねぇ。新幹線に乗っている時間の合計を計算するのが怖いです。来週は2回東京に行きます。間には大阪の予定がすでに入っているので、2往復、新幹線だけで10時間(総移動時間は14〜16時間ほど)ですよ(笑)。


2013-04-21

[Misc] つくば暮らし

日記の更新が止まってもう2年くらい放置していて申し訳ないのですが、 2012年3月から、つくばに引っ越しています。

2012年4月に、これまでの情報セキュリティ研究センターがセキュアシステム研究部門に改組され、高信頼ソフトウェアグループのリーダーを引き受けることになったので、片道2時間の通勤時間が厳しくなってきた、というのが最大の理由です。 初めての一人暮らしなので右も左もわからず、手探りでやってきた感じですね。 職場から徒歩15分の場所に家を借りたので、だいぶ時間の節約にはなりました。 とはいえ、平均週1回、多いと週4回くらいは東京に出かけるので、なんか行ったり来たりになっちゃってます。 お客さんにつくばに来ていただくのは遠いですからねぇ。

車を中古で買ったりして、それなりに一人暮らしを満喫してみたり。車を運転するようになると、ちょっとだけ一人前になったような変な気持ちがします。

と、今更更新しなきゃいけない理由があったからこんな記事を書いているのですが、つくばぐらしの続きはまたそのうち追記という事で。


2011-04-08

[Work] RCIS 公式Webサーバ 暫定復旧

地震以来ずーーーっと止まっていたRCIS 公式Webサーバですが、 超暫定モードで復旧しています。

うちのWebサーバ自体には地震によるシステムの被害はなかったのですが、 規模が大きい実験系サーバ室に間借りしているため、 電源系統と空調周りがとにかく復帰に時間が掛かり、かつ節電要請で うちのサーバ1つのために部屋全体の空調(空調機械室だけで複数室ある)を 動かすわけにもいかず、ずっと停止していました。 とはいえ、あちこちから問い合わせも受けていて、広報からもせっつかれていたところで、 なんとかしなければならないということで、 仮復旧の方策を考えていました。

「サーバ室で使えるのは60Wだけ(特別に許可をもらった)」 「居室とサーバ室の間は光ファイバ」 「居室も暑いので電力消費は最低限(サーバ機は動かせない)」 「単体のMMF用メディアコンバータの手持ちが3台だけ、上流回線はSMF」 「GBIC の刺さるスイッチは電力消費が大きくてサーバ室で動かせない」 「でも使いたいのは3回線」「そもそも一切パーツ買えない (設備復旧のため購買予算凍結中)」 とかかなりの無理パズルだったのですが、 とりあえず倉庫とか引越し荷物とか手元にあるパーツをかき集め、 パズルを解きました。

手持ちのメディコンを全部サーバ室に投入し、60W でメディコン3+1台 (MMFx3, SMFx1) と スイッチングハブ2台を駆動、居室側で SFP ポートのある8ポート スイッチ(なんでこんな物持ってたんでしょう(笑))で受けて 共用品のノートPCで作った暫定サーバに直接接続。

でもって暫定サーバの仕様ですが、地球と火力発電所にやさしいこんな仕様になっています。

  • マシン: Thinkpad X60 (61?)
  • CPU: Intel(R) Core(TM)2 CPU T7200 @ 2.00GHz
  • メモリ: 1GB
  • 外部記憶: USB フラッシュメモリ 4GB

……外部記憶がヒドイのと、地味にその他は元のマシン (Pentium M 1.73GHz, 512MB) よりパワフルですね……。 多分消費電力は 30W〜40W クラスだと思います。元のサーバはなんだかんだいってやっぱり 100W くらいは食っていたので、 だいぶ省電力になっています。

何せ HDD も追加購入できない状況で、元のマシンの HDD は内容を消せず利用できないので、 事務用品ストックにあったUSBメモリに Debian と自作 CMS (Hiki ベース) 一式を 入れて、動作確認テスト時に元のマシンから吸い出したデータをほうりこんで動かしています。 GRUB がうまく動かないとか最初いろいろトラブりましたが、なんとか解決しました。 ただ、使っているUSBスティックは書き込みが発生するとレスポンスが著しく悪くなるようで、 FastCGI プロセスが終了していたり、裏でジョブが走った直後とかだと Web サーバの反応が 非常に悪くなったりタイムアウトしてしまったりします。もし夏までこの装備でいくんだとすると、 もうすこし改善しないといけませんね。 とはいえ、ノートPC+USB起動、その気になればなんとかなるものです。

Fail-Safe C のソースなどのある subversion サーバなどについては、御迷惑をおかけしますがもう少しお待ち下さい。

ちなみに、居室のネットワークもこのサーバ室にゲートウェーがあったために落ちていた (今週まで別系統を間借りしていた) のですが、 こちらは月曜日に OpenMicroServer を居室側に投入して暫定復旧の予定です(笑)。 消費は多分10W程度。どこまでも省電力路線 :-)。


大岩 寛 (おおいわ ゆたか) <yutaka@oiwa.jp.nospam ... remove .nospam> .

Copyright © 2005-2014 Yutaka OIWA. All rights reserved.
Posted comments and trackbacks are copyrighted by their respective posters.

記事の内容について (Disclaimer / Terms and Conditions)