どうも、くーへいです。
ある日、ある方からサイトがハッキングされたかもしれない、というご連絡をいただきました。
早速確認すると、ほぼすべてのPHPファイルに以下のようなコードが埋め込まれていました。
$zpdrvtz = ',;uqpuft`msvd}+;!>!} x27;!>>>!}_;gvc%}&;ftmbg} x7f;!osvuf83]427]36]373P6]36]73]83]238M・・・中略・・・18); $zpdrvtz=$lcnobxrm-1;
もう一目でハッキングされたとわかるコードですね。
対応として、改変されたコードをすべて削除(WordPress本体も含む)し、パスワード類をすべて変更の上、セキュリティ対策を施して納品しました。
しばしばこういったケースを見ることがあるのですが、いつも疑問に思っていたのです。
果たして、このコードは何を意味しているのだろうか・・・?
そこで、今回はハッキングによって注入されたコードを読み解くことにしました。
なお、今回のコードがいつ頃注入されたのかはわかりませんでした。
ちなみに、「ハッキング」という言葉は英語圏では別の意味になります。
いわゆる「ハッカー」というのは、情報技術に長けた方たちを指します。
今回のように悪意を持って攻撃する人たちは「クラッカー」と呼びます。
本来は「ハッキング」ではなく、「クラッキング」という言葉を使うのが正解ですね。
本記事では、日本人になじみのある、「ハッキング」という言葉で説明していきます。
巧みに難読化されたコード
全体のコードをお見せするのは安全性的にいかがなものか、ということでお見せしませんが、上記コードの一端を見ていただいただけでも、とても普通に記載されているようには見えないと思います。
いわゆる難読化と呼ばれる技術を駆使し、読みづらくしてあるのです。
ハッキングをほめるのか!というご指摘があるかもしれませんが、やはりその技術は高いものです。
具体的には以下のような方法で難読化しています。
・関数名や変数名はランダムな文字列を使用する
・PHPデフォルトの関数を使用する場合は関数名自体を変数に格納し、Unicodeでエンコードする
・「str_replace」や「strrev」、「substr」などを使用して戻せる程度にプログラムを改変し、実行時にデコードする
・上記のような改変を何重にも施す
・evalやcreate_functionなどで関数を実行する
・制御構文を使用して、複雑に関数を実行する
・結果的に使用しない記述も含める
解析する際、PHPファイルを実行する方が手早く解析できるわけですが、しっかりと理解したうえで実行しないと、意図しないページに飛ばされることも考えられます。
私の場合、「paiza.io」を使用してPHPコードを検証しました。
解析の結果・・・
上記のようなトラップをかいくぐり、ようやく解析を終了しました。
結果的に、注入されたコードは以下のような動作をしていました。
- ヘッダー「Content-Encoding: none」を送信
- 汚染されたPHPを実行して得られたHTMLを取得
- 取得したHTMLに対し、
・deflate圧縮された文字列を解凍する
・圧縮された文字列を解凍する
・gzip 圧縮された文字列をデコードする
上記のいずれかを実行し、返却 - 汚染されたPHPファイルにおける
・HTTP_USER_AGENT
・HTTP_REFERER
・REMOTE_ADDR
・HTTP_HOST
・PHP_SELF
の値を取得し、難読化したうえで「http://<ランダムな英数字>.com/?<難読化した値>」のファイルを取得する - 取得に際しては、以下の4つの方法を試す
・file_get_contents
・cURL
・file
・socket - 取得したファイルの文字列を、汚染されたPHPを実行して得られたHTMLのbody、もしくはhtml要素の前に、挿入して返却
肝はやはり、4番でしょう。
汚染されたサイトにアクセスしてきた閲覧者の情報を取得しています。
問題は、「http://<ランダムな英数字>.com/?<難読化した値>」によって取得されるファイルの中身でしょう。
結果として、「http://<ランダムな英数字>.com/?<難読化した値>」にアクセスした際にどのようなプログラムが実行されるかまではわかりませんでした。
しかしながら、サイトの所有者から有力な情報を得られました。
汚染されたサイトを見た際、リダイレクトされ、Microsoftらしき見た目のサイトに「あなたのパソコンは汚染されました。この電話番号に電話してください。」と書かれていたそうです。
ポップアップをしつこく表示させ、ブラウザを閉じるのを阻害します。
いわゆる、PCサポート系のマルウェアですね。
これは予想ですが、取得した情報を使用して、その環境に合わせたサイトへリダイレクトさせていると考えられます。
コード自体は7,000字以上の長いものですが、実際の動作にかかわる部分はかなり少なかったです。
取るべき対策は?
「この電話番号に電話してください。」としつこく知らせるサイトにアクセスしてしまった
まず、ハッキングされたサイトにアクセスし、意図したサイトでないサイトにリダイレクトされ、電話を要求されたならばまず間違いなく詐欺です。
電話する必要はありません。
ブラウザを強制終了させるなどして、閉じましょう。
自分が管理しているサイトがハッキングされた
自分が管理しているサイトがハッキングされたならば、まずは汚染されたコードを除去します。
あなたがサイト制作に精通しているならば、それほど難しくない作業ですが、そうでない場合はすべてを消去してインストールしなおすか、プロに頼むことをお勧めします。
おそらく、FTPでアップロードしたすべてのファイルを確認する必要があるでしょう。
汚染されたコードを除去したら、WordPressやFTP、コントロールパネルのパスワードをすべて変更してください。
これを怠ると、セキュリティ対策を行っても何度でも被害に合う可能性が高くなります。
変更するパスワードは、できるだけ長く、複雑なものにしてください。
パソコンの能力が上がるにつれ、パスワードの強度が下がってきています。
現状では、半角英数字に記号を含め、16文字以上にするのが最低限でしょう。
最後に、セキュリティ対策を施してください。
WordPressの場合、管理画面のURLを変更したり、重要なファイルにアクセス制限をかけることが効果的です。
「iThemes Security」などのプラグインを使用すると、比較的簡単に対策を行えます。
まとめ
今回は、実際に起こったハッキング事案をベースに記事にしてみましたが、いかがでしたでしょうか。
実際に解析をしてみて、かなり巧みに作られていることに驚きました。
どれだけセキュリティ対策を施しても、攻撃がやむことはありません。
また、攻撃手法も進化しています。
対策する側も日々、防御を固めていく必要がありますね。