家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

hashcatの使い方

hashcatの概要

hashcatはパスワードクラックのツールです。
hashcatで行うパスワードクラックは稼働しているシステムに対してアカウントがロックされるまでログイン試行を行うようなものではなく、パスワードのハッシュ値から元のパスワードを割り出すものです。
一般的にシステム上のパスワードに関しては平文で保持されるケースは稀で、NISTのガイドラインにおいても「パスワードは適切な一方向鍵導出関数を用いてソルト付きでハッシュ化されなければならない(SHALL)。」と記載されているため、パスワードの保存に関して平文での保存は認めていません。

 

 

 

hashcatによるパスワードクラック

hashcatはブルートフォース攻撃以外にもパスワードクラックの手法が実装されています。

辞書攻撃

辞書攻撃はパスワードの候補のリストを指定し、その中の単語を1つずつ試していく方法です。リストの例としては、「rockyou.txt」等があります。

コンビネーター攻撃

2つの単語をつなげたパスワードに対する攻撃です。

 

マスク攻撃

特定の形式のパスワードに対する攻撃です。
先頭が大文字で6文字の小文字が続き、末尾は数字1つといった形式を指定することが可能です。

 

ルールベース攻撃

対象のパスワードの構成に当たりがつく際に選択する攻撃手法です。

 

ブルートフォース攻撃

総当たりで試行する攻撃です。

 

なお、hashcatでは「-a」オプションで上記攻撃モードが指定できます。

オプション モード名 内容
0 Straight 辞書攻撃
1 Combination コンビネーション攻撃
3 Brute-force ブルートフォース攻撃
6 Hybrid Wordlist + Mask 辞書+マスク
7 Hybrid Mask + Wordlist マスク+辞書

hashcat.net

 

hashcatでZipファイルのパスワードを解読する

実際にhashcatでパスワード付きZipファイルを解読してみます。
今回はKali Linux上で以下の操作を実行しました。

 

パスワード付きZIPの作成

以下のコマンドでパスワードが「pass」と設定したZipファイルを作成します。

echo "Hello!" > Hello.txt
zip -e --password=pass Hello.txt.zip Hello.txt

 

Zipからハッシュ値を取得の解読

johnの中に含まれるzip2johnを使ってZipファイルよりハッシュ値を取得します。

zip2john Hello.txt.zip | cut -d ":" -f 2 > Hello.txt.zip.hash

上記コマンドにより以下のようなハッシュ値が取得できます。

root@kali:~# cat Hello.txt.zip.hash
$pkzip2$1*2*2*0*13*7*b042d89e*0*43*0*13*b042*ab66*c354e2c6e579378c0784e27df319185a18104b*$/pkzip2$

取得したハッシュ値の形式を以下のサイトで確認します。

hashcat.net

今回はpkzipに該当するもの(17200)を確認します。

 

ハッシュ値の探索

hashcatを使ってハッシュ値を探索します。以下のようなコマンドで実行します。

hashcat -m 17210 -a 3 Hello.txt.zip.hash --increment '?a?a?a?a' 

  • -m:ハッシュ形式の指定
  • -a:アタックモードの指定
  • --increment:あとに続くマスク形式'?a?a?a?a'の文字数に至るまで一文字ずつ増やす設定(この例では4文字まで実行)
  • '?a?a?a?a':マスク指定

マスクの文字設定 

オプション 概要 内容
?l アルファベット小文字 abcdefghijklmnopqrstuvwxyz
?u アルファベット大文字 ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d 数字 0123456789
?s 記号 !”#$%&'()*+,-./:;<=>?@[\]^_`{|}~
?a ?l?u?d?sと同じ  
?b 16進数 0x00 – 0xff

hashcat.net

 

上記を実行すると1分もしないうちに以下の結果が表示されます。 

$pkzip2$1*2*2*0*13*7*b042d89e*0*43*0*13*b042*ab66*c354e2c6e579378c0784e27df319185a18104b*$/pkzip2$:pass

 

ここまでで、Zipファイルに設定したパスワードを解析できました。