雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|
2024|06|
2025|01|

2003-08-10

最終日

5日間の缶詰め生活も今日で最終日です.今日はボスも完全復活し,遅刻することなく会場にたどり着きました.朝一のセッションは「The internet is too secure already」という題目の招待公演にしました.ここでも再認識したのですが,どうやら今の私のレベルでは,人によってだいたい何を話しているのか分かる場合と何を話しているのかさっぱり分からない場合とに分かれるようで,今回は完全に後者でした.が,スライドがかなり良くまとめてあったため,話の流れにはなんとか付いていくことが出来ました.曰く,我々(開発者や管理者)の戦いは2勝1敗3分だ.2勝はSSLとSSHでこれらは安全で世の中に広まっている.3分はIPsec, S/MIME, そしてPKIXでこれらは安全だが難点があって十分には広まってはいない.さて,1敗と評価された,安全ではないが世の中に広まってしまったものは何でしょう?

午前の後半は「The case for assurance in security products」という招待公演にしました.開始前に壇上に立った人が,これまでのチュートリアルや招待公演でよいコメントを出しつづけていた人だったので,前の方に座って気合を入れていたら,案の定と言うかNSA(国家安全保障局)のtechnical directorでした.この国ではNSAのそれなりの立場の人が,2日目のチュートリアルのような一見いかがわしげなセッションに参加しているのです(確か会場で見ました).日本は大丈夫でしょうか? 公演の方は,しゃべりも聞き取りやすく,スライドもかなり凝っていて(途中でビデオ再生が2回入るほど)聞きごたえのある内容でした.テーマは概念的なものでしたが,これまでの言動から想像できたとおり「よくものを知っている」ことが公演のあちこちから感じ取れ,こういう人が国の中央機関にいるアメリカという国は,やはりこの分野の最先端を走っているのだなぁと妙に納得しました.

通常のセッションはここまでで,締めのセッションはWork-in-progress reportsです.最初はUSENIXの雰囲気を良く表しているジョーク報告でした.その後,司会者がわざとノートPCに水をこぼして「動かなくなった」と言うなり5mほど投げ捨てるというパフォーマンスで会場をクールダウンさせた後は,普通の説明に入りました.いくつか面白そうなものをピックアップすると,暗号化キーを自動生成してメールの安全なやり取りを可能にするシステム,信号の強度から無線LANに繋がっているPCの場所を割り出すシステム,DoSの監視報告.新種のワームの自動検知システム,ハニーポットを実現するデーモンなどがありました.最後に簡単な挨拶があって「来年サンディエゴで会いましょう」という締めの言葉で全日程が終了.

全体として,非常に得るものの多いカンファレンスでした.いわゆる学会然としたお堅い雰囲気ではなく,招待公演や,時には通常の論文発表でさえ発表の途中に横槍が入って議論が始まったりして,また,特に招待公演の方では他のセッションの公演者が紛れ込んではああでもないこうでもないとやり合っていた様は,今思えばすごい場面に居合わせていたのかもしれません.もう一点驚いたのは,全体的に企業からの参加者が多かったことです.特にチュートリアルセッションは,私が一番若いぐらいで,ほとんどが企業のセキュリティエンジニアもしくは担当者といった人たちばかりで,講師に具体的な質問をかわるがわる浴びせかけていました.日本ではやりかけの産・官・学の連携はかの国では既に実を結びつつあります.

食のコーナー

今日の昼はボスも一緒だったので,またホテルの外に出て,「ブルース・リー」という中国料理店へ.入ってみるとファーストフード形式の簡易レストランで,ちょっとがっかりでした.ランチメニューからエビと野菜の何とかとEgg droppedスープを注文すると,八宝菜にライスがついたものと,おかゆのようなとろみのついた卵スープが出てきました.ライスは相変わらずご飯ではありませんでしたが,スープや八宝菜の味はまあまあでした.夜はホテル近くのスーパーで鶏の丸焼き,サラダ,フルーツの盛り合わせ,ベーグル,ビールを買って部屋で食べることに.調子に乗って買った鶏が日本のものよりかなり大きく,これだけで2人ともおなかいっぱいになってしまいました.鶏はなかなかの美味.サラダはサラダだったのですが,ブロッコリーやカリフラワーが生だったのにはビックリしました.フルーツはまるまる明日の朝に.水だと思って買ったボトルが実は炭酸水(ライム入り)だったのは失敗.これで思い出しましたが,3日目の昼食でペリエ(?)という炭酸水を飲み,これがなかなかおいしかったです.フランス(?)原産で地下から沸いている水に最初から炭酸が入っているんだそうです.そんなのもあるのですね.今日買った炭酸水は人工的に炭酸を入れたものであまりおいしくなかったです.

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

- taru-k ["信号の強度から無線LANに繋がっているPCの場所を割り出すシステム"は、原理はわかる気がするけど、精度ってどのくら..]

- taru-k [ペリエは日本でも売ってるね。サンペリグリーノもおすすめ。]

- hs [1敗はWindowsではなく,通信系のプロトコルです. 無線のシステムは精度までは判りませんでした.先行研究として..]


2009-08-10

[Ruby]1行ずつ処理する

与えられた文字列を1行ずつ処理しようとして、

str.split(/\r?\n/).each { |l| ... }

とかやってはまってしまいました。

"\na".split(/\r?\n/) -> ["", "a"]

とか、

"\n\na".split(/\r?\n/) -> ["", "", "a"]

は期待通りなんですが、空行が末尾にくると

"\n".split(/\r?\n/) -> [] (期待は[""])
"\n\n".split(/\r?\n/) -> [] (期待は["", ""])

となってしまいます。

で、迷走して

"\n".split(/\r?\n/, -1)[0..-2] -> [""]

とかやってたんですが、今度は処理する文字列の最後に改行がない場合にうまくいかない。

とかさんざんやった後からeach_lineメソッドを見つけたりするわけです。というわけで正解は以下。

str.each_line { |l| l.chomp! ... }

2013-08-10

SuperMicro社のBMC/IPMI搭載製品における初期設定の問題について

[概要]

SuperMicro社のBMC/IPMI搭載製品では、その初期設定の状態に問題があるため、特定の条件下で外部からコンソール等にアクセス可能となる可能性があります。

本問題については、該当製品で稼働しているOSのroot権限を取得できる可能性があるため、発見後すぐにIPAに脆弱性関連情報の届出を行いましたが、1年以上に渡り返信が無い状態が継続しているという事であり、また適切に設定する事により回避することができるため、広く公開して注意喚起したほうが公益に資すると判断し、公開するものです。

[公開までの経緯]

[flat] ;2012/03/19;:IPAに届け出 ;2012/04/04;:IPAより届け出受理の連絡 ;2013/07/17;:IPAより2012/05/16(起算日)以降、製品開発者へ連絡をとっているが、返信がない旨の連絡 ;2013/07/18;:IPAに情報非開示依頼の取下げを依頼 ;2013/08/02;:IPAより情報非開示依頼の取下げの連絡 ;2013/08/10;:本エントリ公開

[対象となる製品]

本問題の対象となる製品は以下の通りです。

IPMI Manual (AMI)より

[border]

Intel UP Motherboards supportedIntel DP Motherboards supportedAMD Motherboards supported
X7SB3-FX7DCT-3FH8DMT-F
X8ST3-FX7DCT-3IBXFH8DMT-IBXF
X8STi-FX7DCT-LF
X8STi-3FX8DAH+-F
X8DT3-F
X8DT3-LN4F
X8DTH-6F
X8DTH-iF
X8DTi-F
X8DTi-LN4F
X8DTT-F
X8DTT-IBQF
X8DTT-IBXF
X8DTU-F

IPMI Manual (SMT)より

[border]

Intel Dual-Processor Motherboards supported (-F models only)Intel Single-Processor Motherboards supported (-F models only)AMD Motherboards supported (for -F models only)
X8DTL-3F/-6F/iFX7SPA/E-HF/-D525H8DGG-QF
X8DTN+-FX7SPT-DF-D525H8DGT-HF/-HIBQF/-HLF/-HLIBQF
X8DTU-6F+/6TF+/LN4F+/TFX8SI6-FH8DGU-F/-LN4F+
X9DBU-6F/iFX8SIA-FH8SGL-F
X9DR6/i-FX8SIE-F/LN4FH8SCM-F
X9DRT-H6FX8SIL-FH8DCL-6F/-iF
X9DRG-QF+X8SIT-F/-HFH8DCT-F/-HIBQF/-HLN4F/-IBQF
X8SIU-FH8DG6-F
X9SCA-FH8DGi-F
X9SCD-F
X9SCi-LN4F
X9SCL-F
X9SCM-F
X9SRE-F
X9SRW-F

[問題の詳細]

上記のマザーボードには、Nuvoton WPCM450というBaseboard Management Controller(BMC)が搭載されています。このコントローラにより、専用ポートまたはオンボードのLAN1ポート経由で遠隔地からのコンソールの操作やCDイメージのマウント、電源の制御などが行えます。

このコントローラの標準の設定は以下のような組み合わせになっています。

[flat] ;LANポート:;:Failover ;IPアドレス:;:DHCPで取得

LANポートの"Failover"という設定では、BMCの専用ポートがネットワークに接続されていなければ、オンボードのLAN1ポートで接続を試みます。このため、初期設定の状態で、

  • OSで利用するためLAN1ポートをグローバルなネットワークに接続した
  • LAN1ポートに接続したネットワーク上でDHCPサーバが稼働していた
  • DHCPサーバではMACアドレスによるフィルタリング等は行わずに接続された任意の機材にIPアドレスを割り当てるよう設定していた
  • BMC機能は使わないつもりでBMC専用ポートにはなにも接続しなかった

といった条件を満たしていると、OSで利用している通信とLAN1ポートをシェアする形でBMCにも独立したIPアドレスが割り当てられ、BMCが提供する各機能にアクセスできるようになります。この時さらに、

  • DHCPサーバでグローバルIPを割り当てていた
  • 割り当てられるグローバルIPに対して、ファイアウォール等でパケットフィルタリングを設定していなかった

という条件が重なった場合は、インターネットからBMCへのアクセスが可能となってしまいます。

このBMCはWeb UIも提供しており、その初期アカウント名とパスワードの情報はマニュアルに記載され、SuperMicro社のサポートページからダウンロード可能な状態で公開されているため、誰でも容易に入手可能な状態となっています。前述の通り、このWeb UIからはコンソールの操作が可能となり、また多くのUNIX系のOSではコンソールからの操作に関してはやや楽観的な初期設定が行われているため、

  1. Ctrl+Alt+DeleteでOSを強制的にリブート
  2. シングルユーザモードで起動する

などといった操作で、簡単にroot権限を奪う事ができてしまいます。また、コンソールに表示されているカーネルからのメッセージを確認する事も可能となります。

[回避方法]

BMCポートを外部から遮断されたネットワークに接続することで、ひとまずこの問題は回避できますが、接続先の機器の電源が落ちるなどしてネットワークが不通になると、すぐにオンボードのLAN1ポートに切り替わってしまいます。

さらに悪い事に、いったんBMCがLAN1ポートに切り替わってしまうと、BMC専用ポートの接続が復旧しても自動的に戻らないため、迅速に元に戻すためにはOSをシャットダウンして電源ケーブルを抜き、しばらく待ってから再起動する必要があります。

これらの問題も含めて回避するためのいくつかの方法を説明します。

  1. パスワードを変更する
Web UIにログインしてパスワードを変更します。一番基本的かつ有効な対策です。
  1. BMCは専用ポートのみで使用する
BMC専用ポートを保護されたネットワークに接続してこちらのみ使用するようにします。
    1. Web UIからログイン
    2. [Configuration]->[Network]に進む
    3. [Lan Interface]で"Dedicate"を選択する
    4. [Save]ボタンをクリックして設定を保存する
  1. (((

OS側でCtrl+Alt+Deleteによる再起動を無効にする

直接的な解決方法ではありませんが、インストールしているOS側でCtrl+Alt+Deleteキーによる再起動を無効化することもできます。

;Linux(CentOS)の場合:

(((

/etc/init/control-alt-delete.confを編集して次の行をコメントアウトする

 exec /sbin/shutdown -r now "Control-Alt-Delete pressed"

または/etc/inittabを編集して以下の行をコメントアウトする

 ca::ctrlaltdel:/sbin/shutdown -t3 -r now

))) ;FreeBSDの場合:

(((

以下のコマンドを実行する

sysctl hw.syscons.kbd_reboot=0

さらに以下の行を/etc/sysctl.confに追加して再起動する

hw.syscons.kbd_reboot=0

))) )))

  1. BMCを無効にする
BMCの機能を使うつもりが無いのであれば、マザーボード上のJPBジャンパーの設定を変更してBMCを無効化してしまいましょう。

[免責事項]

  • 本エントリは、該当製品の利用者に安全な運用の方法を提示するために公開するものです。従って、本エントリに記載されている内容を悪用する事は禁止します。
  • 本エントリに記載されている内容をもとに第三者が管理するサーバにアクセスすると、不正アクセス行為の禁止等に関する法律で禁止された不正アクセス行為に該当すると思われます。
  • 本エントリを公開した結果生じたいかなる損害についても、筆者は一切責任を負いません。

以上