2014年9月27日

solarisにbashの脆弱性#ShellShock「CVE-2014-6271」にパッチを適用する

全国1000万のsolarisファンの皆様、本当にお久しぶりです。
本当に久しぶりのsolarisカテゴリの更新です。

SunMicrosystemsがOracleに吸収されてからというもの、いつも心にあった太陽がすっかり沈んでしまったと言う人も多いのではないでしょうか?
Oracle銘のSolarisのロゴを見ると、昔から大好きだった物憂げで繊細だった文学少女に久しぶりに会った時に「夢は起業」とか言っちゃう「意識高い系」に変わってしまっていて嬉々として「お金に働かせるんです!」とか「経営者目線で!」とか言うのを聞いているような残念な心の疼きを感じる人も多いのではないでしょうか?
そして、もうすっかりSolarisを見限ってしまった人も多いのではないでしょうか?

私も公私共にsolarsが大好きでしたが、SunMicrosystemが消滅してから、これからのSolarisに夢や希望どころか興味そのものを全て失ってしまい、職場で構築したクリティカルなサーバーをLinuxに置き換え、自宅サーバーもLinuxで再構築してしまいました。
そしてそれからずっとSolarisとは赤の他人として当たり障りのない距離を保っていたのですが、今日、ちょっと気が遠くなるような、世のUNIXシステム管理者を恐怖のずんどこに叩き込むようなbashの脆弱性である#ShellShock「CVE-2014-6271」を目にしました。
これはbashがデフォルトシェルなら一撃でWebサーバー経由でwebサーバーが動いているユーザー権限で任意のコードが実行可能な恐ろしいものですねー
時々ルート権限で動いているwebサーバーやらsqlサーバーを目にしますが、
こんなサーバーならコマンドひとつでダウンさー♪
YouはSHOCK!シェルでサーバーが落ちてくる!

ShellShock!変数がコマンドに落ちてくる!!
ということになってしまいますね!
世界中のシステム管理者たちが半ばパニックになりながら大喜び大慌てで対応していますが、みんな言及しているのはLinuxやらMac OS Xの事ばかり、誰もSolarisのソの字も言いません。

各Linuxはすばやく対応したパッチをリリースしたので、rpmなりyumなどでアップデートしたらすぐ対応可能ですが、何かの事情で、古いSolarisをWebサーバーとして使い続けている方も多いかもしれません。
solarisのデフォルトのシェルはLinuxのようにbashへのリンクではない素のshなので特に変わったことをせずにそのまま運用している人は問題ないですが、一応bashはsolaris10あたりからデフォルトでイントールされていますし、もしかしたらデフォルトシェルをbashに変えている人もいるかもしれません。

私も公私で何台か古いSolarisサーバーの面倒を見ているので、Linuxへの対応後に念のためこのsolarisのbashパッケージSUNWbashを更新しておこうとしたのですが、私の探し方が悪かったせいかOracleからもどこからも更新版のバイナリパッケージを探すことが出来ませんでした。
というか、そもそも誰もSolarisのことなんか心配してない...
みんなたまにはSolarisのことも思い出してあげてください!

これはあんまりじゃないか。
もう好きでもないし、過去の人だし、むしろ忘れてしまいたい人ですらあるかもしれないけど、それでも昔愛した人じゃないか。
あの時あれだけ傾けた情熱は真実だったはず。
とても恐ろしい病巣を抱え込んでしまっても、特に死にいたるわけじゃないから誰にも気付いてもらえず忘れ去られたままのsolarisさんにちょっとした親切や敬意を向けたって良いじゃないか!

誰もやらないなら俺がやる!
バイナリがなければコンパイルすればいいじゃない!
ソースがなければパッチをあてればいいじゃない!

ということで、本家bashからソースコードをダウンロードし、そのソースコードにパッチを適用し(bash本家のソースツリーにはまだ反映されていないため)コンパイルしたので、その顛末を古いSolarisの心配をする心優しきSolarisユーザーのために公開しておきます。
またunix系OSならMac OS XだろうがBSDであろうが基本的に同じ手順でいけるはず。

0.まず裸になります。
まず、bashのソースコードをダウンロードします

ftp://ftp.gnu.org/pub/gnu/bash/bash-4.3.tar.gz

そしてこのソースコードに対するパッチもダウンロード
ftp://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-025
をbash43-025.patchという名前で保存。

新しくパッチが出たようなのでこいつもダウンロード (2014/ 09/27更新)
ftp://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-026
をbash43-026.patchという名前で保存。

1.ビルドの準備
展開してソースコードのディレクトリに移動


$ gtar zxvf bash-4.3.tar.gz
$ cd bash-4.3

2.ソースコードにパッチを適用
bash本家のソースコードはまだパッチが適用されていないので、自力でバッチをあてる。
solarisはSUNのpatchコマンドしか入っていないので、GNUのパッチで実行の事、GNUパッチがない人は後述)


$ /usr/local/bin/patch -p0 < ../bash43-025.patch
patching file builtins/common.h
patching file builtins/evalstring.c
patching file variables.c
patching file subst.c
Hunk #1 succeeded at 8100 (offset -18 lines).
patching file patchlevel.h
Hunk #1 FAILED at 26.
1 out of 1 hunk FAILED -- saving rejects to file patchlevel.h.rej

$ /usr/local/bin/patch -p0 < ../bash43-026.patch
patching file parse.y
patching file y.tab.c
Hunk #2 succeeded at 8540 (offset -2 lines).
patching file patchlevel.h
Hunk #1 FAILED at 26.
1 out of 1 hunk FAILED -- saving rejects to file patchlevel.h.rej

って感じで終わればパッチ適用完了
patchlevel.hのエラーが出てるけど、これはパッチレベル表記の変更だけなので、今回の対応のレベルでは問題なしかと思うけど、
気持ち悪いようなら、
ftp://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-001
から順繰りにパッチあてていけばいいかと…

3.ビルドする
 prefixでインストール先を/usr/local/bash以下にした。

$ ./configure --prefix=/usr/local/bash
$ make

4.ビルドしたバイナリをテスト
次にビルドできたバイナリに脆弱性がないかテストする。

$ env x='() { :;}; echo vulnerable' ./bash -c "echo this is a test"  
./bash: warning: x: ignoring function definition attempt
./bash: error importing function definition for `x'
this is a test

赤文字の「./」をお忘れなく。これなしだとコンパイルしたbashではなくパスが通っているbash(つまりは入れ替える前のbash)が実行される。
上記のピンクの行が出力されていばOK

vulnerable
this is a test

って赤の行が出力されるとアウト、"echo this is a test"ってコマンドをbashで実行しただけなのに、
環境変数に埋め込まれた"echo vulnerable"まで実行されてます。
恐ろしいですねー!YouはSHOCK!! 変数からコマンドが落ちて来てますね!

5.ビルドしたbashをインストール
ちゃんと動作したならインストールする。rootユーザーなりsudoなりで

# make install

6.バイナリ入れ替え

そして古いバイナリをリネームして実行権限を落とし、
新しいバイナリのシンボリックリンクに置き換える。

# cd /usr/bin
# mv bash bash.old.nopatch
# chmod 444 bash.old.nopatch
# ln -s /usr/local/bash/bin/bash ./

7.インストールしたbashをテスト
そしてちゃんとbashが更新されているかテスト

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt
 bash: error importing function definition for `x'
this is a test

これでOK

パッチがちゃんとあたらないと言う人やpatchコマンドがないと言う人のためにパッチ済みのソースコードを「bash-4.3-026.patched.bydogu.tar」としてあげておいた。
これをダウンロードして
「2.ソースコードにパッチを適用」以外の手順でOKなはずー

しかし、久しぶりにsolarisでコンパイルしていてとても懐かしい親密な感覚にずっと包まれていた。
シェル上でコマンドを実行するのはsolarisさんとの対話であり、ソースコードをコンパイルするのは二人だけで行われるひとつの新たな試みなのだ。
Solarisを触っていて、スタニスワフ・レムの『ソラリスの陽のもとに』のように惑星ソラリスで死んだはずの人と出会う体験をしているような気分だった。
そして、ひとしきりsolarisさんと言葉を交わし、Linuxのように便利だからとか使いやすいからとかいう理由でbashを標準シェルにするのではなく、最低限の機能に限った安全で軽くて何にもリンクしていないshがデフォルトのシェルになっている設計など、solarisさんの良い所を再認識したなー

ああ、過ぎ去った時代は、過ぎ去ったからこそ美しい。

更新履歴

  • 2014 09/25 投稿
  • 2014 09/27 パッチレベル26対応の部分を更新

  

2014年7月15日

土偶WEBテレビショッピング/「みおのっふ」はじめました。

本日のブログの登場人物


土偶:
このブログの執筆者、将来の夢はプレデター

アシスタントのお姉さん:
略して「アシ:」と記述
中国から日本、通販サイトから大手ITベンダーまで、世界中のWEBを又にかけて様々なサイトで活躍する、氏名経歴等一切が謎の美人オペレータである。
ライバルは404お姉さん
皆様もどこかで見たことあるはず!

今日はこんな二人による「土偶WEBテレビショッピング」をお届けします。

アシ:こんにちは皆さん!土偶WEBテレビショッピングのお時間です!

土偶:こんにちはーーー!(甲高い声)

アシ:土偶さん暑いのに元気ですね!

土偶:はい!わたくし気温が30度を越えると何かが覚醒してテンションが上がるんです!

アシ:漠然とした「何か」なんだ!変なものが覚醒しないといいですね!

土偶:はい!

アシ:私も夏は嫌いな方じゃないですけど、熱さもテンションも覚醒も土偶さんも程々がいいです!

土偶:肝に銘じます!

アシ:で、暑苦しく覚醒中の土偶さん、今日はどんな商品の紹介をしていただけるんですか?

土偶:はい!今日は「みおのっふ」をご紹介したいと思います!

アシ:みおのっふ?それはどんなものなのですか?美味しいものですか?

土偶:はい!とても美味しいです!この夏にぴったりのものですよ!特に「IIJmio高速モバイル/Dサービス」を使ってらっしゃる方に!!

アシ:まぁ!美味しそう!

土偶:でしょう?ではご紹介しましょう!

アシ:よろしくお願いします!

土偶:では!といきたいところですが、その前に少し私の個人的な話を聞いてください!

アシスタント:土偶さんの個人的な話はわりとどうでもいいんですが、聞かないと続かないんですよね!?

土偶:はい!そうなんです!

アシ:では嫌々おききします!なるべく手短にさっさと済ませて本題に入ってくださいね!

土偶:ありがとうございます!で、私のスマホには「IIJmio高速モバイル/Dサービス」のSIMが入っています!

アシ:いわゆる月千円以下の格安SIMというものですね?情強を隠れ蓑にした貧乏人御用達のプランですね!

土偶:はい!まさしくそのとおりです!

アシ:やっぱり!

土偶:で、そのIIJmioなのですが、以前まで「ミニマムスタートプラン」だったものをこの7月から「ファミリーシェアプラン」に変更して3つの端末で3枚のSIMを使うようになったんです!

アシ:ミニマムスタートがファミリーシェアに!それは何かの比喩ではないですよね!?

土偶:はい!この「IIJmio高速モバイル/Dサービス」には「ミニマムスタートプラン」ならSIM1枚につき月1GB、「ファミリーシェアプラン」ならSIM3枚まであわせて3GB分の高速通信が出来るクーポンがバンドルされているんですが...

アシ:ファミリー間でクーポンを巡って血で血を洗う抗争が繰り広げられるわけですね!

土偶:はい!で、今まで、スマホ上のアプリでこのクーポンをONにしたりOFFにしたりしていたものの「ファミリーシェアプラン」にして複数のSIMカードのクーポンをあっちをONにこっちをOFFにとかやろうとすると、2枚目3枚目は制御できるのに1枚目はできないとか、ちゃんと動かないアプリが多いんです!

アシ:まぁ!そんな細かいことはどうでもいいですけど、それは困りましたね!

土偶:はい!さらにどうやってもサーバー上の30日分しかパケットログが見えないんです...

アシ:あらやだ!過去を引きずらないタイプ!

土偶:はい!30日を過ぎたものからどんどん消えて見えなくなるんですねぇ...

アシ:まぁ!ハト並の知能!さすが土偶さん!本題はまだですか?

土偶:はい!そこで!「みおのっふ」です!「IIJmioクーポンスイッチAPI 」が公開されたこともあり、アプリの動作をWEBで行えるようなWEBアプリを作ってみました!

アシ:まぁ!おうち手作り!

土偶:はいそうです!PHPとjquery mobileとCSS3で実装されたWEBフォントを駆使して製作いたしました!どうぞご覧ください。これが「みおのっふ」です!画像をクリックすると拡大しますよ!

http://mionoff.dogustat.com/

アシ:あらまぁ!シンプルというか、空っぽというか殺伐としているというか空虚というか!すばらしいですね!

土偶:ありがとうございます!この画面は初期画面ですので何もないですけど、「みおのっふ」は使い始めてこそ意味があるのです!

アシ:そうなんですね!本当に使えるんだ!

土偶:もちろんです!では特別に動作中の模様をご覧頂きましょう!

 

アシ:あら!本当にちゃんと動くんですね!安心しました!

土偶:はい!でも、ただクーポンをON/OFFするだけでは余りにも芸がありません!そこで特別に「みおのっふ」だけの機能をお付けしました!

アシ:土偶さんでもオンリーワン!えっ?「みおのっふ」だけの機能?まさか!?

土偶:はい!そのまさかなんです!通常アプリではIIJmioのサーバーにある30日分のログしか閲覧できないところ、「みおのっふ」では特別に閲覧したログを無期限に保存できるような「DBモード」なるものをお付けいたしました!

アシ:「DBモード」!?「どこでも爆睡できるモード」ですか!?まさに土偶さんそのものですね!

土偶:はい!「DBモード」に設定するとアクセス時にログデーターをデータベースに保存することができます!DBに保存されたデーターなら無期限に永遠に閲覧できるのです!

アシ:まぁ!でも本当に無制限?本当に?永遠に!?

土偶:はい!もちろん本当です!現在までテスト稼働していた「みおのっふ」は3つのSIMの3か月分のログをsqliteのデータベースに保存しており、そのDBの容量は24kバイトほどです!そして!現段階でのみおのっふサーバーのデーター領域の空きは10ギガバイトほどあります!

アシ:うーん数字が多くてわかりませんわ?はっきりおっしゃい!

土偶:はい!ざっと計算しますと!3ヶ月で24kバイトと言うことは1年で96kバイト!空き容量10ギガをkバイトで言い換えると100万kバイトになります!

アシ:まぁ!100万kバイト生きた空き容量!

土偶:はい!そして、1年で96kバイトで10ギガバイト全てお使いいただくすると...なんと!1万と416年お使いいただけます!

アシ:まぁすごい!なんか細かい数字で膨大な数をまくし立てている様はまるで詐欺師みたいですね!!

土偶:はい!とにかく1万年はデータが溢れる心配はございません!!

アシ:まーすばらしい!事実上無制限ですねー!でも、私そんなに長生きできるかしら?

土偶:ご心配要りません!「みおのっふ」のスケールに比べれば個々の生命体の一生などクズ同然です!生きてても死んでても大差ありません!

アシ:まぁ!大胆!人類と文明とあらゆる生命体への宣戦布告ですね!

土偶:はい!まさにみおのっふのデータベースがパンクするより先に地球が滅亡すると思います!

アシ:へーすごいですねーこれはもう子々孫々お使いいただけますねー!

土偶:もーーちろんです!

アシ:はい!このとーっても素晴らしい「みおのっふ」ですが、どこが素晴らしいのか、土偶さんもう一度まとめてご紹介いただけますか?

土偶:はい!もちろんよろこんで!

アシ:ではおねがいします!

土偶:まずその1!「みおのっふ」は「ミニマムスタートプラン」はもちろんの事「ファミリーシェアプラン」でも問題なく動作いたします!

アシ:おひとりさまでもご家族でも、独りで家族分を頬張る欲張りさんでも、皆様に安心してお使いいただけるんですねー

土偶:はい!次にその2!「みおのっふ」はWEB上で個々のログとSIM状態を確認し、クーポン状態を完全に操作いただけます!

アシ:スマホを触らずにブラウザから制御できるんですねーお子様のスマホをリモートのパソコンから切り替えられるんですねークーポンがある時ーない時ー

土偶:はい!そしてその3!「みおのっふ」を「DBモード」に設定してお使いいただければ過去30日以前のログも無限に保存して未来永劫閲覧できます!

アシ:おじいちゃんからお孫さん、その曾^n孫まで安心!お家断絶も怖くないですねーあの頃の昔の私に出会えるかしら?

土偶:更に、「みおのっふ」はセキュリティの面も配慮しております!パスワードとユーザ名を保存せず、ご入力いただくのは最初の一回だけ!以降はみおのっふサーバーでのみ有効なトークンで認証しています!

アシ:まぁ!便利な上にセキュリテの方面でも安心ですね!とはいえむしろこれは「みおのっふ」というよりはIIJmioのAPIの仕様ですね!むしろ感謝すべき対象はIIJmioの開発チームでは?土偶さん!

土偶:はい!まさしくそのとおりです!

アシ:まさにこの「みおのっふ」はまさにビッグバンセブンセンシズイノベーションですね!!

土偶:はい!そうなんです!(甲高い声)

アシ:でも...お高いんでしょう??

土偶:ご安心ください!この便利で美味しく可愛い「みおのっふ」!通常価格20万円のところ、今なら何と!このブログをご覧の皆様だけに!数量限定の期間限定!100%割引の0円でご奉仕!

アシ:ええーっ!!100%割引の0円!まさにどんな事業者にも不可能な価格破壊ですね!本当に良いんですか!!

土偶:いいんです!(震え声)

アシ:まぁ土偶さん!身も心も太っ腹!これはお買い得ですねー

土偶:はい!期間限定100%割引は今だけ!!

アシ:まぁ!すばらしい!最初からフリーだって言えばいいのに!でも、IIJmio使っていない人はどうしましょう?

土偶:はい!みのっふするためにIIJmio契約してもいいくらいだとおもいます!

アシ:さすがにそれは言いすぎです!

土偶:ごめんなさい!!

アシ:ご紹介いただいた「みおのっふ」ですが、もしかして、気の迷いで、出来心で、何かの間違いで、使ってみたいと言う奇特な方が、もしかしたらいらっしゃるかもしれませんね!

土偶:ぜひお使いください!

アシ:土偶さん、どうすれば「みおのっふ」を使えますか?

土偶:はい!ここ「みおのっふ」に接続するだけです!windowsだろうがMacだろうが、androidだろうがIOSだろうがインストールの必要すらありません!

アシ:まぁ!インストール!ポッ

土偶:さぁ!皆も今すぐみおのっふ!

アシ:み・お・の・っ・ふ

アシ:土偶:mioをon offみおのっふ~♪

土偶:君が忘れ、僕が忘れ、皆忘れてしまっても~♪ みおのっふだけは忘れない~♪ 1万年まで忘れない~♪

アシ:今日も皆でみおのっふ~♪ 明日も皆でみおのっふ~♪ 1万年までみおのっふ~♪

土偶:君をOn off~♪ 僕をon off~♪ SIMをon off みおのっふ~♪

アシ:土偶:mioをon offみおのっふ~♪  mioをon offみおのっふ~♪

そんな「みおのっふ」はここだー

おわり。

プレゼンてどこがやっても誰がやっても大して楽しくないけど、こういう風にしてくれたら面白いのになー

 

2014年5月14日

どんな環境でも確実にスリープする「スリープる」を作った/APIスリープで休止する端末でスリープのショートカットを作る

ありがたい事に、いつも使わなくなったりお古になったPCやらPC用品やらをプレゼントしてくれる友人にWindows8のタブレット端末をいただいた。
windows8が入ったDellのlatitude10なるタブレットである。

今まで仕事ではWindows8をちょこちょこ使う機会があったものの、ちゃんと使うのはじめてである。

世間でWindows8は使いにくいと評判だけど、いやいやめっちゃ使いやすいですやん。

「タブレットを買うと家庭での生活が一変する」と言っていた友人がいたけどまさにその通り。
普段はタッチパネルをメインに使っていても、キーボードとマウスをつなげば普通のパソコンとして使えるので、今までつかっていたIBMのThinkpadはもうほとんど起動されず、デスクトップでバリバリ作業するまでもない事はすべてタブレットで行っている。

スリープしておけばほとんど電力を消費しない割りにすぐに複電するので、使わない時はちょくちょくスリープするようにしたいのだが、
通常操作でスリープしようとすると画面右をスワイプして、チャームを出してから、設定→電源→スリープ
とちょっとまどろっこしい。

ってことで、スリープするためのショートカットを作ろうと思ったのだが、一般的なWindows内のシステム関数を使う、

rundll32.exe powrprof.dll,SetSuspendState

へのショートカットだと、他のPCではちゃんとスリープするのに、latitude10だけは休止状態になってしまう。

他にもいろいろとスリープさせる方法を探したり試したりしたのだが、このlatitude10ではWindows8.1にアップグレードしたせいか、どうしても休止状態になってしまう。

で、スリープのショートカットがなければ作ればいいじゃない!
ということで、WSHのスクリプトを書いてみた。
機能としてはシャットダウンメニューを出してプルダウンメニューからスリープを選んでエンターキーを押しているだけw
具体的にはシャットダウンのメニュー画面で↑キーを八回押して、デフォルトでどのメニューを選択していても一番上のメニューを選んだ状態にしてから、↓キーを特定回押して「スリープ」を選んでエンターキーを押すとw
謎のAPI呼び出したりやらブラックボックスな内部関数叩かずにOSの標準メニューを操作しているので、動作は間違いない。
ただし時々間違えてシャットダウンしたり再起動したりするのはご愛嬌w
なので、一応起動時にスリープするか聞いて、「はい」を押すか、3秒放置すればスリープ状態に移行するようにワンクッション置いてみた。
更に、Windowsのバージョンによってスリープまでのメニューの構造が違うのでOSによって↓を押す回数を変えるようにした。
以下のコードをコピーしてメモ帳に貼り付け「sleeple.vbs」とか適当な名前で保存すればOK。ダブルクリックすれば動作するですぞ。

'sleeple Ver1.0
'by 土偶 http://www.dogustat.com/?p=7217
'windows8をスリープする(他バージョンのwindowsでも可)
'
set Shell = CreateObject("Shell.Application")
set WshShell = WScript.CreateObject("WScript.Shell")

Answer = WshShell.Popup("スリープ?",3, "スリープる", 36 ) 'タイムアウト3秒
if ( Answer <> 6 ) and ( Answer <> -1 )then Wscript.quit
Count= GetOSVersion()
Shell.ShutdownWindows()
Do Until WshShell.AppActivate("Windows のシャットダウン")	 'ダイアログが出るまでループしつつ待つ
	 WScript.sleep 100	 '100ミリ秒待つ
Loop

For x =1 To 8 '↑を八回押す
	WshShell.SendKeys "{UP}"
Next

For x = 1 To Count '↓をCount回押す
	WshShell.SendKeys "{DOWN}"
Next

WshShell.SendKeys "{ENTER}"	'エンターを押す

Function GetOSVersion()
	Dim obj,colTarget,objRow,str,aData,nData,I

	Set obj = GetObject("winmgmts:\\.\root\cimv2")
	Set colTarget = obj.ExecQuery( "select * from Win32_OperatingSystem" )
	For Each objRow in colTarget
		str = objRow.Version
	Next
	aData = Split( str, "." )
	For I = 0 to Ubound( aData )
		if I > 1 then
			Exit For
		end if
		if I > 0 then
			nTarget = nTarget & "."
		end if
		nTarget = nTarget & aData(I)
	Next

	Ver = CDbl( nTarget )
	'Msgbox(Ver)

	Select Case Ver
	Case "5.1"	'XPの場合↓3回
		Count = 3
	Case "6"	'vistaの場合↓3回
		Count = 3
	Case "6.1"	'7の場合↓3回
		Count = 3
	Case "6.2"	'8の場合↓2回
		Count = 2
	Case "6.3"	'8.1の場合↓2回
		Count = 2
	Case Else
		Count = 2
	End Select
	GetOSVersion = Count
End Function

例のごとくZIPでよこせという方にはexe化したものを上げておく、
名づけて「スリープる」 ダウンロードはこちら [sleeple.zip]

アイコンも無駄に可愛いくしたったw

名前とアイコンまでつけた割には、動きゃぁ良いんだよ!とVBSをexe化しただけのなんちゃって実行ファイルやけど、この実行ファイルをWindow8のスタートパネルにピン止めすればスリープが捗るぞ。

しかし、これをexe化して実行してみたとたんにあるアンチウィルスソフトウェアに未知のマルウェアとして検出されたのでびっくりだよ!
ええっ!?私は知らんうちにウィルス作ってたのかい!?

節子それウィルスやない中身はただのvbスクリプトやー
とは思いつつも、でもまぁ確かに特定のAPI叩いてキーコードを勝手に送ってるねんから動きとしては限りなくトロイの木馬に近いwしかも端末スリープさせてるしw

しかし、まぁ、誤検知されたのは良いとしても、検出時にアンチウィルスソフトの「未知のウィルスの検体をサーバーに送りますか?」的な質問に思わず「はい」を押してしまったのは不覚であった。
私の作った「スリープる」は即刻アンチウィルスソフトウェアに捕獲されてその会社のサーバーに転送されてしまったのだ。

おーいちょっと待ってくれーーー違うねんーあー自分の作ったファイルやのにー
署名と配布先URL入りでトロイの木馬作るわけないやろーーあほー

「スリープる」はその会社のラボに囚われ、丸裸にされて分解されて隅々まで調べられ、あんなことこんなことされて尋問されているに違いない。
そしてラボでは多分「何や中身はただの無害なVBスクリプトやんけ」とか言われているに違いない。
私のバカバカ~「スリープる」いろんな意味でごめんよ~~

ドナドナド~ナ~ド~ナ~TCP/IPパケットがゆ~れる~♪

  

2014年4月25日

WordPress内のTinyMCEでオリジナルのコードをいじらずにpタグ問題を解決する。

ここ何週間か仕事でずっとTinyMCEを組み込んで設定しまくっており、いろいろと改造しているうちにinitの書き方やら関数の定義の方法やらを結構覚えた。

で、せっかく覚えたのだからと、仕事はまったく関係ないこのブログで利用されているWordpressも内部のエディタとして同じくTinyMCEが組み込まれているので、今までWordPressで不満だった、ビジュアルエディタで改行すると勝手に<p>タグでくくって段落にされてしまうところを初期設定でただの<br>タグで改行するようにしたのだ。

今までwebで調べた限り、WordPressのTinyMCEをカスタムする場合、テンプレートのfunction.phpやらwp-include以下のwp-tinymce.phpやらを直接書き換える方法しか見つからなかったけど、今回はプラグイン化してオリジナルのコードにまったく手を加えないようにしてみた。
設定そのものは調べればすぐわかるけど、その設定をプラグイン化したというとところに需要があるかもしれないので公開するどす。

とはいえ、javascriptのコードだと

tinyMCE.init({
force_p_newlines : false,
force_br_newlines : true,
forced_root_block : '',
});

とたった三行書き足すだけの設定をプラグイン化www

<?php
/*******************************************************************************
Plugin Name:not P tag but BR tag onTinyMCE
Plugin URI: http://www.dogustat.com/?p=7004
Description:WordPressのビジュアルエディタの改行時にpタグで囲まずにbrタグで改行するようにするどす。
Version: 1.0
Author: 土偶
Author URI: http://www.dogustat.com/
*/
/*
*******************************************************************************/
///////////////////////////////////////////////////////////////////////////////
function mce_init_filter_function($args){
$args['force_p_newlines'] = false;
$args['force_br_newlines'] = true;
$args['forced_root_block'] = '';
return $args;
}
add_filter('tiny_mce_before_init', 'mce_init_filter_function');

このコードをnotPbutBRonTinyMCE.phptとか適当な名前でWordPressのプラグインディレクトリに置いた後に有効化すればおっけー
zipでよこせという方こちら[notPbutBRonTinyMCE.zip]

ちなみにwordpressに"TinyMCE Advanced"を導入していても問題なく動いた。
同じように"tinyMCE.init()”でする設定なら、ちょいちょいっと書き足せばボタンの追加から定義まで何でもできるぞー

2013年9月19日

スパムにはDBリソースを分けてやるのすら勿体無い。

以前からこのブログには一日に100ほどのコメントスパムが投稿されるのだが、wordpressに最初から入っているAkismetプラグインの性能が良くてほとんど全てのスパムがスパムとして認識されて非公開状態になっている。

このAkismetプラグインは投稿されたコメント内容をまるごとどこぞのAPIに投げてTrue かFalse を返してもらうことでスパムかどうかを判定しているようであるけど、しかしながら、わざわざスパムであるものをネットワークリソースを使って問い合わせ、さらに非公開状態で置いておくためにデータベース的のリソースを使うのも無駄に思えるようになって来た。

以前は管理しているサーバーへのアタックがあまりにもひどくて、あまりにもあまりな奴には自動で反撃するようにしてホンマに喧嘩になりそうになったのでw、今回は無茶なことはせずにwordpress上のレイヤで対策するとして、また別のスパム対策プラグインを二つ導入し、さらに1つ独自の大人しいプラグインを書いてAkismetの前段階でもフィルタするように実装してみた。

とりあえず、5日ほど経過した時点ではAkismetに到達する前に全てスルーできているようで満足だが、もしコメントしたのに反映されないって人がいたらお知らせください。

  

2013年9月4日

androidカテゴリを作る

去年からメインの電話とデータ端末をAndroidに変えてから、その面白さにかなりはまって多くの時間と労力を注ぎ込んだ。

去年の7月から12月の間にL-04C→P-01D→F-03D→So-05Dと渡り歩いていじくり倒し、うち1台をブート領域の書き換えに失敗して文鎮化させ、結局現在はSO-05Dに落ち着いたけど、昨日ブログに書くまでこのAndroidに関するエントリもカテゴリも無かったのに気付いた。

四機種渡り歩いてきて現在はSO-05Dをつかっているけど、過去の機種も忘れ去られた訳じゃなくちゃんと使ってるぞ。

L-04C→初androidで弄くりまくる、Android改造を幅広く学ぶ。現在はコンソール端末 or キーボードとして利用中。

P-01D→普通の改造に加えて、frameworkをデコンパイルして手を入れることを覚える。自力S○Mロック解除成功 現在はIP電話の子機 として利用。

F-03D→富士通のスマートフォンがボロクソにいわれている理由を学ぶ、ガラケーアプリの別端末への移植方法を学ぶ。現在はテレビとして利用。

ってみんなスマートフォントして使ってないやんー

  

2013年9月3日

Xperia SX SO-05D、マジで文鎮5ループ前

去年の12月からxpreia sx SO-05Dを使っていて、初期状態ではandroid 4.0だったものが、この7月に4.1 jelly beansへのアップデートが公開されていた。

しかし私はiijmioで運用しているので、root化、テザリング制限解除、cwm recovery導入、mod化、セルスタンバイ対策などなどと手を入れて使っており、しばらくはアップデート後にこれと同じ状態にする手法が確立されていないからそのままにしてあったのだが、最近rootを取るセキュリティーホールが発見されたので、意を決してアップデートした。

アップデートとroot化までは上手くいったものの、テザリング制限を解除した後にadb接続からの再起動でadb接続が出来なくなり、電源を切った後に起動すると再起動ループになってしまった。

メインで使っている端末でオサイフやらなんやらが入っているのでめっちゃ焦ったのだが、最終的にはFlashtoolでファームウェアを焼きなおしてムリヤリ復活させた。

結局、原因はテザリングの設定が入っている/data/data/com.android.providers.settings/databases/settings.dbのジャーナルファイルのパーミッションの不備であった様だ。

デフォルトは

-rw-rw---- system   system      57344 2013-09-02 09:22 settings.db
-rw------- system   system      21032 2013-09-02 09:22 settings.db-journal

と、settings.dbが660、settings.db-journalが600だが、settings.db更新後に、settings.dbとsettings.db-journalをまとめて666にしたのがまずかったらしい。

正解はsettings.dbのパーミッションのみ666で、勢いあまってsettings.db-journalまで666にすると「マジで文鎮5ループ前」になる。良い子のroot簒奪者は注意だぞ!

ちなみにsettings.dbのパーミッションは再起動後にandroidの中の人によって660に戻されるので安心だ!

とりあえず、スモールアプリはデフォルトで入っているのでmod化せず、root化、テザリング制限解除、cwm recovery導入、セルスタンバイ対策と問題なく動作している。

----------

一応問題になったテザリング制限解除の方法を書いておく。

sqlite3コマンドはTitaniumuBackupをインストールすれば、/data/data/com.keramidas.TitaniumBackup/files/sqlite3 /system/bin/sqlite3に入るので、これを/system/binあたりにコピーして

mount -o rw,remount /system と言う感じで/systemをrwでリマウント後に

sqlite3 /data/data/com.android.providers.settings/databases/settings.db などと開き、

  sqlite> select * from secure where name="tether_dun_required";

49|tether_dun_required|1

sqlite> update secure set value=0 where name="tether_dun_required";

sqlite> select * from secure where name="tether_dun_required";

49|tether_dun_required|0

 

sqlite> select * from secure where name="tether_dun_apn";

50|tether_dun_apn|docomo tethering,dcmtrg.ne.jp,,,,,,,,,440,10,0,*

sqlite>update secure set value="iijmio tethering,iijmio,jp,,,mio@iij,iij,,,,,440,10,3,default,supl" where name="tether_dun_apn"

sqlite> select * from secure where name="tether_dun_apn";

50|tether_dun_apn|iijmio tethering,iijmio,jp,,,mio@iij,iij,,,,,440,10,3,default,supl

tether_dun_apnの変更はtether_dun_requiredが0になってれば必要ないけど一応しておく。

  

 

 

2013年1月23日

谷口長世『サイバー時代の戦争』/サイバー上での日常は前線でもあるのか?

先日から「サイバー空間で行われる戦闘」、「戦闘空間としてのサイバー領域」「通常戦闘に不可欠な空間としてのサイバー領域」についての三つの本を紹介すると書いたけど、最後の「通常戦闘に不可欠な空間としてのサイバー領域」に関する本がこれ、谷口長世著『サイバー時代の戦争』である。

この本は米軍によるものといわれるイランの原子力施設にウィルスを送り込んでダウンさせたというような直接的な「サイバー戦争」だけでなく、物理的な通常戦闘がどれだけサイーバ領域の支援を受け、どれだけサイバー依存になっているかという話である。

例えば無人攻撃機や偵察機、或いはGPSや早期警戒管制機を使った戦闘支援システムは完全なサイバー領域を前提に成り立っているし、

イランに無傷で鹵獲されたアメリカの無人機はサイバー攻撃によって制御を奪われて着陸させられたとか、イスラエル軍は部隊の侵攻前にレーダー網やら支援システムに対してサイバー攻撃を仕掛けて作戦行動を有利に進めるとか、そういう話である。

そして、サイバー的なオープンソース的な考え方を元に、NATO軍が各国ごとに維持している軍の部隊やら通信や支援や補給のシステムやらを、共同作戦を行う時に直ぐに接続して情報共有して連携をとれるように、末端をネットワークとして接続する際のプロトコルや仕様が米軍主導で共通化されたというあたりが印象的だった。

通常の戦場なら戦闘領域があり前線があり後方があるわけであるけど、サイバースペースにはその区切りは全く無いし、 そしてそれは、サイバー世界のディープな部分に浸っている人なら誰でもが肌で感じているであろう、戦場や前線としてのサイバースペースがどれだけ日常と一体化しつつあるかということをこの本は示しているように思う。

と、大層に三回に分けてまで本を紹介したけど、要は日常の整合性と日常の安全そのものが如何にサイバー上の平和を前提に成り立っており、そして平和的なサイバースペースと前線としてのサイバースペースの境界があいまいになりつつあるかということが言いたかった。

今、複雑系の本を読んでいて、その中に一次元セル・オートマトンと呼ばれる、隣り合ったもの同士の相互作用で自己変革して行く系が時間を立てばどうなるかというのが4つのクラスに分けられるという話があった。

それは、時間が経てば全くの0か1のどちらかで全てが埋め尽くされる「全てが同じ」クラス1、特定の部位にライン上にデータが集中する「特定の部位に全てのデーターが集中する」クラス2、常にまだら模様が動き回る「常にデーターが流動するカオス」のクラス3、そしてフラクタルのような模様を描きながら成長したり縮小したりする「複雑適応系の生息領域」とみなされるクラス4に分けられるという。

インターネットのようなネットワークは明らかにそのクラス4の「複雑適応系の生息領域」で解釈されると位置付けられていると思うけど、サイバー上の混乱に収拾がつかなくなれば、サイバースペースだけでなく、世界そのものに対して「全てが同じ事を考え同じ事を感じる世界」のクラス1、「特定の部位に全てのモノと権力が集中する世界」のクラス2、そして「常にモノと権力が移動しつづけるカオスな世界」のクラス3にでもどのようにでもなるような気がする。

と、なんか無駄に大げさで中二病な話になってしまった...

 

2013年1月21日

土屋大洋『サイバー・テロ 日米vs.中国 』/戦闘空間としてのサイバー領域

「サイバー空間で行われる戦闘」について先日書いたので、次は「戦闘空間としてのサイバー領域」についての本はこれ、土屋大洋氏による『サイバー・テロ 日米vs.中国 』(文春新書)を、

タイトルこそ『サイバー・テロ 日米vs.中国 』となっているけど、この本は特定の国と国の争いというレベルでサイバー戦争を見るのではなく、米、露、イスラエル、中国、EU、そして日本が「戦闘行為が行われる場所としてのサイバー領域」をどのように捉えているかについて政治的な視点で書いているということになろうか。

例えばイランの核施設に対する米軍によるサイバー攻撃や特定の国家が他の国家の政府に対してソーシャルエンジニアリングを行っているという事実を、国家間の闘争や単純にサイバー空間でのアタックとしてとらえるのではなく、サイバー空間の軍事的なパワーバランスに関わる政治的な問題として捉えるという風な見方だ。

この本では著者の専門とその立場上、サイバー戦争をITやテクノロジーの見方からではなく、国家的な安全保障の立場から書いていることがポイントであろうと思う。

ITに関する仕事をしたり、日々コンピューターと戯れているとこの種の出来事に対して技術的な側面から見てしまう傾向性が自然に身についてしまうけど、それを政治的に見てみれば全く違う見方が出来る。

昔の科学者は自分が純粋な知的好奇心で発見したり開発したりした何物かが軍事転用されて多くの人を殺したり戦争の道具として使われたことにとても悩んだというけど、一介の技術者だったりハッカーだったりする人もそんな状況に追い込まれる日が来るかもしれない。

ちょっと書いてみたコードだとか、作ってみたアプリケーション、見つけたセキュリティーホール、あるいは自分が開発したり管理したりする自分と関わりのあるシステムやネットワークだとかがサイバー攻撃の手段であったり道具であったり、踏み台であったりボットネットワークを構成する一要素になったりすることがあるかもしれない。

自分のITに関する知識やら技術が高ければ高いほど、自分の関わるサイバー的な何かしらが国家間のサイバー戦争の一要素となる可能性はとても多いのだ。

ITをただ使うのではなく、仕事や趣味でITそのものに対して熱意を持って関わる 人は読んでおいて損は無いと思う。そして、更に言えば、この本に何が書いてあるか、ではなく「何を書いていないか」に注目して読んでみるとまた別の知見が得られるかもしれない。

 

2013年1月19日

岡嶋裕史『ハッカーの手口 ソーシャルからサイバー攻撃まで』 /「サイバー空間での戦闘」とはどんな戦闘か

前日に「サイバー空間で行われる戦闘」、「戦闘空間としてのサイバー領域」「通常戦闘に不可欠な空間としてのサイバー領域」について書いてある最近読んだ三つの本をおいおい紹介してゆくつもり。

と書いたが、まずは最初の「サイバー空間で行われる戦闘」について岡嶋裕史氏による『ハッカーの手口 ソーシャルからサイバー攻撃まで』 を、

この本はネット上で行われる典型的な「ハッキング」やら「クラッキング」の手法をソーシャルエンジニアリングからフィッシング、SQLインジェクションから分散反射型DoSアタックまで幅広く紹介しており、そんなアタックやクラックの対象が国家や企業や団体だけでなく、一個人にまで及んでいるという話である。

この本の特徴的なところは、一般的なサイバー攻撃の手法を紹介するだけでなく、その攻撃に我々がどれくらい無防備で、どれくらいの被害が及びうるかというところが強調されているところだろうか。

「サイバー空間で行われる戦闘」についての本として紹介したけど、これはその「戦闘」に関して、ネットやサイバースペースでのアタックとは具体的にどんなものか、何が攻撃の対象になり、何が盗まれる対象となり、なにが操られる対象となるのか、それが大まかに理解できる本である。

そしてそれが技術者向けに書かれているのではなく、ITの知識が殆どなくても読めて理解できるように平素に書いてあるところがミソである。

この本はサイバースペースを戦闘領域と捉えた場合、その戦闘領域で実際に戦闘を行う戦闘員のための本ではなく、戦時下にあるサイバースペースで生きる人が戦闘に巻き込まれたり戦闘に駆り出されたりしないための基礎知識みたいなものではないだろうか。

 

Next »