ファイルをダウンロードして Checksum を表示する ShellScript

注意 : 新技術を記載している内容ではありません。

最近 Linux Mint の公式ページが改ざんされ、Backdoor が仕掛けられた ISO が配布されるという事件がありました。
根本的対策は今回の事例で言うと ISO 配布側で取るしかないと思いますが、ユーザ側で気づける手段を増やすためにはどうすればいいか、を考えるきっかけになれば良いのではないかと愚考しています。

今回の Script を書くに至った経緯ですが、以下の記事に次のような記載がありました。

「Linux Mint」にバックドアを仕込んだハッカー、手口と目的を語る - ZDNet Japan

ユーザーにバックドアを仕込んだバージョンをダウンロードさせる最も良い方法は、ウェブサイト上のチェックサム(ファイルの完全性を検証するのに使われるファイル)を、バックドアを仕込んだバージョンのチェックサムと入れ替えることだ。

 さらにPeace氏は、「どのみち、チェックサムを調べるユーザーなんかいない」と述べている。

そもそもの話、ダウンロードファイルの妥当性を確認する方法ですが、以下の方法があるかと思います(パッと思いつく限り)。

  1. GnuPG を用いた妥当性確認
  2. ローカルで checksum を計算し、サイト上のハッシュ値と比較

記事内にある通り、サイト上のデータ(署名ファイルやサイト上に記載されているハッシュ値)が改ざんされていた場合は個人側ではどうしようもないと思いますが、普段からデータダウンロードの際にはデータの妥当性確認を行っておきたいところです。

今回は Download - Linux Mint を確認し、妥当性確認に使えそうな 2 を試します。
ただし今後のコマンド入力の手間を省きたいので、シェルスクリプトにして今回は /usr/local/bin に入れます。
(別ディレクトリ作って PATH 通してその中に入れる、とやるのが環境上一番キレイだと思いますが、まあ個人 PC ということで…)
取得する checksum は md5, sha1, sha256 です(各暗号学的ハッシュ関数の説明は割愛します)。

if 文内のコメントは Linux 上で実行した場合のコマンドです(動作確認はしていません)。

  • 所感

2 の場合、ShellScript にしてみると打つコマンドは多くないと思うのですが、記事内のコメントは(多くとも)4 コマンドと目視確認を手間に感じる人が多い、もしくは確認用のコマンドを知る人が多くない、ということを指しているのでしょうか。あと Linux Mint のサイトを確認したときに GnuPG もなければ Checksum は md5 のみ記載のため、Script を書いていて辛くなりました。
あとダウンロードファイルを信頼している書き方なので curl脆弱性があったらタヒぬかも。