いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.112 / 読者数:1100名

こんばんは、うすだです。

台風4号、あっという間に大暴れして過ぎ去っていきましたね。

ここ名古屋でも、台風の通過に備えていましたが、カメは大丈夫だろうと思って、 ベランダに出しっぱなしにしていました。

しかし、夜中になって、風がかなり強くなってきたので、ちょっと心配になり、 部屋の中へ水槽を入れることにしました。
すると、水槽の水位が、いつもの 1.5倍くらいになっていました。

台風というと、風にばかり注目してしまいがちですが、 雨もすごいんだなということが、よくわかりました。

まあ、カメが溺れ死ぬことはないと思いますが、 それでも早めに気づいてよかったと思います。カメは、いつも通り、 のんきにしていましたけど。

どうでもいい話が終わったところで、今週も、はりきってまいりますよ!

今週のお題 - パスワードを推測する

先週は、 shadow ファイルのパスワード・フィールドに記述される文字の作成方法について、 ご紹介しました。

Vol.111 - パスワードの暗号化について理解する
http://www.usupi.org/sysad/111.html

今週は、一歩進んで、パスワードを推測してみたいと思います。

…え? それって、システム管理とどう関係があるの…?

という疑問を持たれた貴兄も多いのではないかと思いますが、いやいや、 侵入される側としましては、侵入する側の行動を推測することで、 侵入に備えることができると思うのです。

そんなこじつけっぽい理由に納得されたかたも、 技術的に興味を持たれただけのかたも、楽しんでいただけますと幸いです。


とはいえ、あくまで初心者向けのメルマガを謳ってますから、 難しい方法をご紹介するわけにはいきません。(わたし自身詳しくありませんし。)

ですので、以降では、侵入を試みるサーバの /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 という変数に格納します。
引数がユーザ名だけの場合は、getpwnam という関数を使って、 システムに登録されている暗号化されたパスワードを入手します。
(当り前ですが、入手するには root の権限が必要です。)

あとは、標準入力からパスワードの候補を得て、順番に crypt で試していくだけです。 見つかったら、生パスワードを出力して終了します。

 

なにはともあれ、実行してみましょう。
まず、上記のスクリプトを searchpasswd.pl という名前で保存します。
そして、test ユーザのパスワードが chestnut だった場合、 root で以下のように実行しますと…

  # ./searchpasswd.pl test < /usr/share/dict/words
  test's password: chestnut

ああ、簡単にばれてしまいました。
ちなみに、ここでは、パスワードの候補として、 /usr/share/dict/words を使用しています。

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
  vipw: そのファイル password は使用中です (現在は /etc/ptmp)

さて、vipw を起動しますと、/etc/passwd の編集画面になるのですが、 変更したふりをすると(1文字消して同じ文字を書く等)、 /etc/shadow も編集を行うか聞いてきます。 そこですかさず y と答えてください。
(ちなみに、お好みのエディタがある場合は、環境変数 EDITOR に指定をしましょう。 vipw コマンド実行時に、それが立ち上がります。)

管理者はわしひとりじゃい! とか、 お試し環境なのでどうなってもいいよという場合は、 普通のエディタでやっちゃってください。

 

…おっと、前置きが長くなりました。本題に入りましょう。

まずは、先週の Perl スクリプトを使用して、 パスワード・フィールドに書くものを求めます。

  % ./makepasswd.pl test1 '$1$abcdefgh$'
  $1$abcdefgh$m0INEKWW1jrRTfpNdto3a/

パスワードは test1 です。
そして、設定したいユーザのパスワード・フィールドに書きます。
たとえば test ユーザに設定するには、/etc/shadow の、

  test:!!:13476::::::

などとなっている行を、以下のように書き換えます。

  test:$1$abcdefgh$m0INEKWW1jrRTfpNdto3a/:13476::::::

…それだけです。
書き換えたら、su や ssh などのコマンドで、確認してみましょう。

 

ちなみに、上記パスワードは、/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 の言葉だけでは、ほとんど一致しないはずです。
そこで、候補に数字や記号を挿入するなどして、試してみましょう。

悪用するなと言っておきながら、この宿題はいかがなものか、という気もしますので、 あくまでも、技術的な観点のみで考えてくださいませ。

あとがき

前々から、情報過多と言われているこの世の中ですが、それでも、 情報は多いほうがいいと思い、いろんなメルマガを購読していました。

ですが、ここのところ、あまりにも斜めな斜め読みをしているなと思い、 思い切って、ごっそり減らしてみることにしました。

しかし、言うはやすしとかなんとかで、実際やってみると、けっこう大変でした。

まぐまぐから発行されているメルマガは、一括解除できるから楽なのですが、 独自配信しているところは、ひとつずつ解除しないといけません。

しかも、メールアドレスを書いてぽちっと解除ボタンを押すだけ、 にしてくれればいいのに、ログインが必要だったり、 パスワードが必要だったりしたのには、ああもうって感じでした。

これからは、このサイトにメールアドレスを教えてもいいか、 本当にこのメルマガは読むに値するか、といったことをじっくり考えてから、 登録をしようと思います。

結局、流行りの技術やキーワードを知っていても、自らの手で実践して、 自分のモノにしない限りは、あまり意味がないですよね。
また、ほんとうに大事なことは、何年たっても色褪せないはずです。
まわりのノイズに惑わされることなく、どっしり腰を落ち着けて、 技術をモノにしていくべきだと、あらためて思いました。

というわけで、みなさんもこれを機会に、 購読しているメルマガの整理をしてみてはいかがでしょうか。
このメルマガが購読に値しないと思った場合は、 それもまたしかたのないことだと思います。 ばっさりと切り捨ててくださいまし。(TεT)

 

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また来週に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−栗の絵しか描いていません。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 5 をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューションや、Solaris10の例も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora8)
Fedora8のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日本の Linux 情報
日本の、Linux 総本山的なところです。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
Open Tech Press
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん





▼ 最近読んだ本

ハリー・ポッターと不死鳥の騎士団 ハリー・ポッターと不死鳥の騎士団
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと炎のゴブレット ハリー・ポッターと炎のゴブレット
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターとアズカバンの囚人 ハリー・ポッターとアズカバンの囚人
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと秘密の部屋 ハリー・ポッターと秘密の部屋
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと賢者の石 ハリー・ポッターと賢者の石
J.K.Rowling
  ハリポ月刊なので読み直してます
アルケミスト アルケミスト
パウロ・コエーリョ
  また読んだ
賢者の書 賢者の書
喜多川 泰
  違った視点から見られてよかった
セキュリティウォリア セキュリティウォリア
Cyrus Peikari, Anton Chuvakin
  やや冗長…ためにはなりました
CORE MEMORY CORE MEMORY
John Alderman, Mark Richards
  この筐体でPC作ってほしい!
新訳 星の王子さま 新訳 星の王子さま
サン=テグジュベリ
倉橋 由美子
  つまらない大人になったのか…
.....

[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の創りかた」 渡波 郁
「非常識な成功法則」 神田 昌典
…これ以前は記録してません…

▼ 気に入ってる本

夢をかなえるゾウ 夢をかなえるゾウ
水野 敬也
  いままでで最高の「笑える」成功本
Linuxデバイスドライバ Linuxデバイスドライバ
Alessandro Rubini,
Jonathan Corbet
  ドライバ作らなくてもためになる
Firefoxの改造テクニック! Firefoxの改造テクニック!
大浦 淳
  いま栗日記拡張を考えてます
Apacheモジュール プログラミングガイド Apacheモジュール プログラミングガイド
小山 浩之
  Apacheの中身もわかるよ
図解 実戦マーケティング戦略 図解 実戦マーケティング戦略
佐藤 義典
  栗日記も戦略的に行こう!
やぎの目ゴールデンベスト やぎの目ゴールデンベスト
林 雄司
  よめも爆笑してました
アルケミスト アルケミスト
パウロ・コエーリョ
  ヘコみそうなとき読みます
X51.ORG THE ODYSSEY X51.ORG THE ODYSSEY
佐藤 健寿
  X51.ORGの集大成
チベット永遠の書 チベット永遠の書
Theodore Illion
  いろんな意味ですごい!!
影響力の武器 影響力の武器
ロバート・B・チャルディーニ
  思わず納得します