脆弱性対策

Heartbleed やら Shellshock やら POODLE やら、最近ビッグな脆弱性がたくさん出てきたように感じますね。おさらいしましょう。

Heartbleed

Heartbleed は OpenSSL の実装上の脆弱性です。OpenSSL は SSL/TLS で通信するためのライブラリで、Apache の mod_ssl を始め、色んなソフトウェアが依存しています。脆弱性の内容は、OpenSSL が malloc で取得したメモリ領域を初期化せずに使うもんだから、無関係なセッションのデータが盗み見できちゃうというもの。ショッピングサイトの Web サーバーに Heartbleed 攻撃すれば、クレジットカード情報とか見れちゃうかもしれません。

Shellshock

Bash の実装上の脆弱性です。環境変数に “() { :;}; <任意のコード>” をセットして bash を起動すると、<任意のコード> が実行されてしまいます。Perl なんかで書いた CGI スクリプトの中で bash を利用したスクリプトを呼び出すとアウトです。例えば HTTP_USER_AGENT 環境変数は自由に設定できるからです。bash をアップデートするか、WAF でフィルタリングしましょう。

POODLE

SSL 3.0 の Cipher Block Chaining というモードに存在する設計上の脆弱性です。何と、暗号を解読されてしまいます。Apache での対策は簡単で、mod_ssl で SSLv3 を無効化するだけです。SSLProtocol ディレクティブを使います (SSLProtocol all -SSLv2 -SSLv3)。すると、TLS 1.0 以上の安全なプロトコルだけが使用されます。SSL が全滅したので、今後は TLS という用語に一本化される…のでしょうか。

(コウヅ)

広告

スイッチも疲れてる

某メーカー製の PoE スイッチから白煙が上がりました。数時間電源アダプタを抜いて休止させ、それから電源アダプタを差し込んだところでした。

どうもレギュレータなる部品が犯人のようです。夜はエアコンを切ってしまう環境だったので、疲れがたまってたんでしょうか。南無阿弥陀仏。

a

※ DC ジャックの右のチップが煙を噴きました。

シャープ?井桁?

巷間に言うまとめサイトなどを読んでたら、電話機の # はシャープではなく井桁、という話題が上っていました。おソース http://woman.mynavi.jp/article/140531-31/

横棒が水平で縦棒が垂直よりやや傾いているのが井桁 (#)、縦棒が垂直で横棒が水平よりやや傾いているのがシャープ (♯)、だとか。じゃあパソコンのキーボードに印字されているのは井桁ですね。

欧米では何て呼んでる?こんな記事を見つけました http://blog.dictionary.com/octothorpe/

曰く、ポンド記号とかナンバー記号、近時は Twitter の影響でハッシュタグなんて呼ばれてるとか。正式名称は octothorpe (オクトソープ)。# には八つの切っ先があるので octo- を接頭辞にしたが、thorpe の出自は諸説紛々で、スポーツ選手の Jim Thorpe に由来するとか、ただのナンセンスジョークだとか、古ノルド語で畑地を意味する語だとか言われているそう。

ところで C# のロゴデザインってどんなんだっけ?Wikipedia によると、ちゃんと C♯ になってます。でもテキストでは C#. ややこしい!

とにかく、# は井桁、♯ はシャープ。脳裏に刻もう!

(コウヅ)

オンラインストレージ!

クラウドいかがですか!ということで、いまさらながら流行のオンラインストレージを試してみました。

そもそもオンラインストレージって何?どこかのサーバーのディスクスペースを間借りして、自分のファイルをアップロードして保管したり、アップロードしたファイルをダウンロードしたり共有したり、ということができるサービスです。操作は Web ブラウザから、あるいは専用のクライアントソフトウェアを使用します。

レンタルサーバーを借りれば FTP, SCP, あるいは WebDAV なんかを利用して同じことができます。が、オンラインストレージはサインアップすればすぐ使えるし、自分でサーバーの管理をしなくて済むので圧倒的に手軽です。何より安い。Google, Yahoo!, Amazon なんかは数GB のディスクスペースを無料で使わせてくれます。すごい!

ということで、上記の3社のサービスを使ってみて、クライアントソフトの使い勝手を調べてみました。

Google Drive

無料で利用できる容量は 15 GB です。Web インターフェースの外観と操作性は Google Mail と同様です。誰が何をいつ更新したのかというメタデータが蓄積されるのが面白い。

専用のクライアントは Mac, Windows, Android, iOS に対応しているようです。Mac 版と Windows 版を試しました。どちらもローカルのホームディレクトリに同期用のディレクトリを作成し、中身を Google Drive と同期するような仕組みになっています。このディレクトリの中にファイルを置いたり、中のファイルを更新したりすると、Google Drive 側も変更されます。その逆も同様のはず。Google Drive を通常のディレクトリと同様に扱えるので、非常に便利です。クライアントを終了した後に同期用ディレクトリの中身を変更すると、次回クライアントを起動した時に変更内容を Google Drive と同期するようです。

専用クライアントはマルチアカウント非対応です。つまり、気軽にアカウントを切り替えることができません。メインのアカウントはクライアントソフトで、サブのアカウントは Web ブラウザで、という風な使い分けが必要になるのかな。

なかなか安定していて良いサービスだと思います。

Amazon Cloud Drive

無料で利用できる容量は 5 GB です。Web インターフェースの外観と操作性は Google と似たような感じです。

専用クライアントの対応状況も仕組みも Google Drive と同様です。試してみましたが、ファイルが正常に同期されず、使い物になりませんでした (Windows 8.1 で試用)。サブディレクトリは同期されますが、ファイルはダメ、という謎の症状です。Cloud Drive に空のディレクトリばかり増えてしまいました。残念です。

Yahoo! ボックス

無料で利用できる容量は 5 GB です。Web インターフェースの(以下略)。

専用クライアントの対応状況は上記2つと同様です。が、Windows 版はローカルのディレクトリと同期する方式ですが、Mac 版は Finder ではなく、専用クライアントの画面でファイルをアップ/ダウンロードする仕組みです。Finder と直接ファイルをやり取りする分にはスムースですが、他のアプリケーションから Yahoo! ボックスの中身を操作する術がありません。rsync だの grep だの find だのといったツールが使えないのは残念です。Yahoo! ボックス Web API を公開しているので、ローカルディレクトリと同期するツールを作ることはできるでしょうが、そんな手間をかけるくらいなら Google Drive を使う方が簡単です。

ということで、Google Drive を使うことにしました!Google の一極集中は恐ろしいです。

(コウヅ)

やってしまった

新生 Linux 修験道をうっかり闇に葬ってしまいました。カーネルをアップデートしたら動かなくなり、しょうがないバックアップから戻すか……と思ったらバックアップを取っていなかったという。さらに焦って操作ミスし、完全にお釈迦にしました。いつも通りレスキューディスクから起動すれば良かったのに、ネタになるかと思っておかしなことをしてしまいました……。てへぺろ。

※ 2014-02-28
Google のキャッシュを頼りに、新生 Linux 修験道に掲載した記事をこのサイトに再掲しました。

mingzi, kouling て何やねん!?

firefox がどんなリクエストヘッダを送信してるのか見てみようと思って、nc -l localhost 9999 を実行し、firefox で http://localhost:9999 にアクセスしてみました。すると…

GET / HTTP/1.1
Host: localhost:9999
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:26.0) Gecko/20100101 Firefox/26.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: has_cookie=1; mingzi=********; kouling=********; menu=dhtml; num_per_page=20
Connection: keep-alive

Cookie のところに mingzi, kouling という如何にも中国語チックで怪しさ満点のキーが…。

ものすごく気になるのでググってみましたが、そのものずばりの回答が見つかりませんでした。どうも Virata EmWeb という web サーバにアクセスするとセットされるらしいです (http://ask.metafilter.com/73149/Doe-anyone-know-what-this-web-application-is)。 Juniper Netscreen とかがこのサーバを採用してるというので、いつもどおり ssh でポートフォワード (ssh -L 10443:hoge:10443 piyo@fuga) して Juniper SSG のレスポンスヘッダを見てみました (openssl s_client -connect localhost:10443)。

HTTP/1.1 200 OK
Date: Mon, 27 Jan 2014 10:56:57
Server: Virata-EmWeb/R6_0_1
Transfer-Encoding: chunked
Content-Type: text/html
Cache-Control: no-cache
Pragma: no-cache

firefox でクッキーを消してから SSG にログインしてみました。それからもう一度 firefox のリクエストヘッダを見てみました。

GET / HTTP/1.1
Host: localhost:9999
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:26.0) Gecko/20100101 Firefox/26.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: has_cookie=1; menu=dhtml
Connection: keep-alive

mingzi と kouling はありません…。ちなみに、mingzi は名字と書いて名前のこと、kouling は口令と書いてパスワードのこと、のようです。

気になるわあ…。

(コウヅ)

アーカイバを試してみる

大量のファイルを tar 等でアーカイブすると時間がかかる場合があります。tar の他にアーカイブツールはいくつかありますが、速度に差はあるんでしょうか?ちょっと試してみましょう。

まずはゴミファイルを /tmp/insane に作りましょう。このための ruby スクリプトを書いてみました。

#!/usr/local/ruby-2.0.0-p353/bin/ruby
# coding: utf-8

# ゴミファイルをぶちまけるディレクトリ
PATH = "/tmp/insane"

unless Dir.exist? PATH
  puts "#{PATH} を作成中"
  Dir.mkdir PATH
end

puts "#{PATH} に移動します"
Dir.chdir PATH

200000.times{|i|
  puts "#{i} 個目のゴミを作成中"
  File.open("junk_#{i}", "w"){|f|
    f.puts i.to_s
  }
}

puts "おしまい!"

実行します。

time ruby /tmp/takeadump.rb
# 実行結果
#中略
#real    1m17.191s
#user    0m7.097s
#sys     0m14.191s

i ノードを浪費しました。ディスクスペースも無駄遣いしてます。

df -i /tmp
# 実行結果
#ファイルシス   Iノード  I使用 I残り I使用% マウント位置
#/dev/sda6       262144 200022 62122    77% /tmp
du -sh /tmp/insane
# 実行結果
#787M    /tmpinsane

まずは tar (GNU tar) でまとめてみましょう!

cd /tmp
time tar cf insane.tar insane
# 実行結果
#
#real    3m17.056s
#user    0m2.006s
#sys     0m42.312s
ls -lh insane.tar 
# 実行結果
#-rw-r--r-- 1 kozu kozu 196M  1月 17 14:47 insane.tar

次は zip です。公平のため、非圧縮でアーカイビングしました。

time zip -qr0 insane.zip insane
# 実行結果
#
#real    2m7.208s
#user    0m4.507s
#sys     0m46.748s

今度は cpio です。

time (find insane | cpio --quiet -oO insane.cpio)
# 実行結果
#
#real    1m47.770s
#user    0m2.152s
#sys     0m40.612s

dar と xar も試しましたが、十分経っても終わらなかったので中止しました…。

tar, zip, cpio の 3 つをそれぞれ3回連続で実行した時の実行時間 (秒) の平均を出してみました。

tar: 109.51800
zip: 109.01466
cpio: 96.78533

ファイルサイズも興味深いです。

ls -lh insane.*
# 実行結果
#-rw-r--r-- 1 kozu kozu  10M  1月 17 17:59 insane.cpio
#-rw-r--r-- 1 kozu kozu 196M  1月 17 17:46 insane.tar
#-rw-r--r-- 1 kozu kozu  36M  1月 17 17:52 insane.zip
gzip -v insane.*
# 実行結果
#insane.cpio:     79.6% -- replaced with insane.cpio.gz
#insane.tar:      98.1% -- replaced with insane.tar.gz
#insane.zip:      79.3% -- replaced with insane.zip.gz
ls -lh insane.*
# 実行結果
#-rw-r--r-- 1 kozu kozu 2.1M  1月 17 17:59 insane.cpio.gz
#-rw-r--r-- 1 kozu kozu 3.7M  1月 17 17:46 insane.tar.gz
#-rw-r--r-- 1 kozu kozu 7.5M  1月 17 17:52 insane.zip.gz

cpio のアーカイブが妙に小さいですが、展開するとちゃんと 200,000 個のファイルがありました。

zcat insane.cpio.gz | cpio -i
# 実行結果
#20305 blocks
ls -f insane | wc -l
# 実行結果
#200002

cpio バンザイ!

(コウヅ)