rcmdnk's blog

Posted in Computer Tagged as GitHub

cURLを使ったインストール方法の危険性

GitHubで公開しているレポジトリの中で、いくつか cURLを使ってインストールスクリプトを取ってきてインストールする 方法を入れてる物がありますが、 昨日書いたreddit のところでも指摘されてる様に、場合によっては危険だったりします。

スポンサードリンク

cURLを使ったインストール方法

上のレポジトリのスクリプトは

$ curl -fsSL https://raw.github.com/rcmdnk/sentaku/install/install.sh| sh

とすることでインストール出来ます。

cURLは基本的にURLで指定された場所の物を取ってくるコマンドですが、 それをそのままshに渡すことでinstall.shをローカルで実行することになります 1

上のインストールスクリプトでは/usr/local/etc, binに上のレポジトリから スクリプトをコピーして入れていれています。

cURLを使ったインストール方法の問題点

cURLを使った上の様なインストール方法を危険だ!と言った話を時々見ます。

スクリプトが悪意を持ったコマンドを2 簡単に実行できてしまうのがまず問題なんですが、 ただ、これだけだと他のpkg(Mac)やexe(Windows)でのインストール方法も 勿論同じ危険性があります。

しかし、cULRでの場合、スクリプトがURL先にあるので、これをブラウザで確認出来ます。

この、確認出来る、というのが逆に仇となります。

Ref:

Protect yourself from the hidden dangers of curl <url> | sh

上のページでは下のURLのスクリプトが紹介されています。

$ curl -s http://pipe-to-sh-poc.herokuapp.com/install.sh | sh

http://pipe-to-sh-poc.herokuapp.com/install.sh

このURLをブラウザで開くとYou may be OK...echoするだけの特に問題の無いスクリプトがブラウザに表示されると思います。

ただ、これをターミナル等からcURLを使ってみると全く違う物が見れると思います。 (取り敢えずこのURLは特に悪さはしませんが、心配な場合はshの代わりにcatして 取ってきた中身をただ見るだけにしてみてください。)

これは、サイト側がUser Agentを見て表示する内容を変える様なページを 動的に作ってる場合です。

djm/pipe-to-sh-poc

この場合、多少疑わしいサイトだ、と思って調べる癖があって、 確認出来なければインストールしない、というような人でも、 逆に安心しておかしな物を入れてしまう可能性があります。 (勿論、何も考えずにインストールする人はそれ以前の問題ですが。。。)

上のスクリプトを説明してるページ ではこれを回避するために、vipe3 を挟んだり、vipeの様に途中でエディタで確認する作業を挟む cURLのラッパースクリプトを作ることが紹介されています。

もしくは、

$ curl -s http://pipe-to-sh-poc.herokuapp.com/install.sh | cat

の様に、取ってきたスクリプトを一度実行せずにcatで確認したり 4

$ curl -sO http://pipe-to-sh-poc.herokuapp.com/install.sh

Oオプションを使ってローカルに保存 5 して確認してからそのファイルを実行したりすれば安全です(内容を完全に理解出来れば)。

これらの確認を行えば普通のバイナリのインストーラーよりは確実に安全になります。

という訳で、cURLを使ったインストール方法は、 ちょっと疑わしいサイトを気にしてる、程度だと逆に安心させられて 悪意あるスクリプトを実行させられてしまう可能性があるので危険だ、というわけです。

ただし、GitHubにあるファイルなんかだと、この様な偽装をすることは無理(だと思う) なので使うのもありかな、とは思っています。

勿論、どんなものでも偽装される可能性はあるので少しでも怪しそうなら 使うのは辞めるべきですが。

追記

そういえば丁度広告関連で変なインストーラーが示される、って話が話題になってますね。

Bing(Yahoo!プロモーション)だとChromeと検索すると正しいものが表示されずに 変なダウンロードページが表示されるとか

なぜhao123に汚染されるのか - ex

Adobeや他のソフトでも同じような事が起こったりとか 他の検索エンジンでも同じことが起こったりとか

広告でスパムが表示されると聞いたので検索エンジンで色んなワードを入れてみた - 戯れ言

アドセンスですら

Adsenseで表示される「Download」広告が恐ろしい4つの理由と、その対策。

これらの場合には、URL見てある程度怪しいかどうか見るしか無いわけで、 余り有名でないソフトだと判断仕様がない場合も。 まあ、そんな場合にはそもそも確認出来るまで使うな、ということですが。

それに比べれば、スクリプトさえ落として来てやること理解出来て、 単純な作業なら安心して入れられるcurlの方法はまだ、安全かな、と。 (まあ、そもそもインストールする対象がぜんぜん違うものでしょうし、 コンパイルしたり色々複雑な作業を行う様な巨大なスクリプトだと ぱっと見では判り辛いですが。。。)

追記ここまで

スポンサードリンク
  1. ここで使ってるオプションは

    -f, --fail:
        サーバーエラーが起こった時に何も出力しないで終了する。
    -s, --silent:
        silentモード。進行状況などの出力をしない。
    -S: --show-error:
        silentモードと同時に使用するとエラーについてだけ表示する。
    -L: --location:
        ページがリダイレクトされてる場合、リダイレクト先まで取りに行く。
        (デフォルトはリダイレクトされてるとリダイレクト先は見に行かない。)
    

  2. rm -rf ~/してみたり…

  3. vipeはmoreutils というDebianのパッケージに入っているコマンドで、 パイプとして挟むと入力をエディタで編集して出力として渡す事が出来ます。 Homebrewなんかで探すときはvipeではなくmoreutilsで検索すると出てくるので、 このパッケージごと入れます。

  4. One way “curl pipe sh” install scripts can be dangerous [proof concept]

  5. もしくは-o <file>でファイル名を指定して保存とか、wgetで取ってきたり

Related Posts Plugin for WordPress, Blogger...