先週、シノロジー社製のNAS(network attached storage)デバイスを標的にした、SynoLockerと呼ばれる新たなランサムウェアファミリーについての記事を我々は執筆した。SynoLockerについてと思われる初期のうわさでは、悪名高いCryptoLockerと関係している可能性があるとされていたので、さらに深く掘り下げることにした。

 表面上、SynoLockerとCryptoLockerには多くの類似点がある。その最たるものは、似通った名前と、暗号アルゴリズムの選定や被害者から金を巻き上げるアイデアの類似性だ。しかしながら表面下では、類似性は急速に失われる。SynoLockerに感染すると、まずは被害者ごとにユニークなRSAのキーペアが生成される。秘密鍵はマルウェアのオペレータの元を離れることはないが、公開鍵は被害者のデバイス上に格納される。この公開鍵はデータの暗号化に使われるが、復号は対応する秘密鍵でのみ可能だ。マルウェアのオペレータが秘密鍵を掌握している限り、被害者が暗号化されたファイルへアクセスするのを妨げることができる。

 被害者のファイルの、実際のコンテンツを暗号化するにあたって、SynoLockerはAESを用いている。最初に、暗号化するファイルの大きさと名前からIV(initialization vector)を生成する。このIVは後の暗号化アルゴリズムでも使われるが、さらにランダムに生成された文字列と連結し、実際の暗号キーを生成するためにも使用している。続いて、オリジナルのファイルのコンテンツを暗号化する。同時に、いわゆるHMAC(keyed-hash message authentication code)も暗号化されていないデータから生成する。HMACは、一般にはデータの完全性の検証に用いられるものだ。最後にキーの生成に用いられたランダム文字列を、RSAの公開鍵で暗号化する。これにより、データを復号するための鍵を再生成するには、最初にRSAの秘密鍵を用いてランダムな文字列を復号することが唯一の方法となることが保証される。

Diagram of the encryption process and resulting file
暗号化プロセスと得られるファイルの図

 ファイルの暗号化が終了すると、SynoLockerはオリジナルのファイルを新しいファイルに置き換える。その新しいファイルには、まずRSAで暗号化したランダム文字列を書き込む。続いて「THE_REAL_PWNED_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_1337」(Xは40個)というマーカー文字列を書き込む。これは暗号化されたファイルであることを確認するために用いる。マーカーの後ろに、暗号化プロセスで使用されたIVを書き込む。次に、オリジナルファイルのコンテンツの暗号化バージョンを書き込む。最後に、暗号化プロセスの最中に生成されたHMACを新しいファイルの末尾に書き込む。プロセスの途中いずれかの時点で何かが失敗したり悪い方向にいったとしても、オリジナルのデータが失われることがないような方法で、以上のすべての処理が行われる。すべて完了したときにのみ、SynoLockerはオリジナルのファイルを新しいファイルに置き換えるのだ。復旧がより困難になるよう、ランダムなデータでオリジナルのファイルを上書きすることも試みる。

File encrypted by SynoLocker, as viewed in a hex editor
SynoLockerで暗号化されたファイル。hex editorで表示(矢印はマーカー文字列の先頭を示す)

 ファイルの復号を行うには、必然的に上記のプロセスの逆になる。まず最初に、SynoLockerはランダム文字列を被害者のRSAの秘密鍵で復号して手に入れる。次に、暗号化されたファイルから取得したIVとともにランダム文字列を用いて、実際のAESキーを生成する。最後にこのキーを使用してファイルデータを復号する。同時に、SynoLockerは復号したデータから新しいHMACを生成する。最終的にオリジナルデータのHMACと新たに生成されたHMACを比較し、一致した場合にのみ、復号プロセスが成功したものと判定される。繰り返すが、これにより、プロセスの途中で何か悪い方向にいった場合であっても、存在するデータが失われることはないことが保証されるのだ。

 SynoLockerで使われている暗号化手法に加え、当社では感染の媒介物についてももっと見つけ出したいと思っていた。最善を尽くしたが、これまでのところ、SynoLockerが使用する媒介物について正確に特定できないでいる。ただ、SynoLockerはたったひとつの悪意のあるバイナリというよりも、むしろファイル群であって、感染の媒介物を通じてデバイスにアップロードされる。これらのファイルにはすべて特定の目的があり、また完全に機能させるために多くは互いに依存しあっている。この投稿の最後に、SynoLocker関連のファイル一覧を挙げる。

 SynoLockerのバイナリの分析中、オペレーションの別の側面の監視も継続していたが、マルウェアのオペレータが活動しているのを目にしている。支払いの指示のために被害者が閲覧するように指示されるWebサイトが、最近更新された。このページには現在「This website is closing soon...(このWebサイトはまもなくクローズする)」という注記が記載されている。オペレータらは、5500個を超える秘密鍵を保有しているが、一括で200 BTCで販売する意思があることを示している。

Recent screenshot of SynoLocker website
SynoLockerの最近のWebサイトのスクリーンショット

 オペレータが計画を成就するか、またそれが被害者に何をもたらすのか、継続して監視する。

 SynoLocker関連のファイル一覧
 /etc/synolock/server
 /etc/synolock/synosync
 /etc/synolock/synolock
 /etc/synolock/crypted.log
 /etc/synolock/decrytped.log (SynoLockerのスペルミス)
 /etc/synolock/RSA_PUBLIC_KEY
 /etc/synolock/RSA_PRIVATE_KEY
 /etc/synolock/.restore
 /etc/synolock/.decrypt
 /etc/synolock/watch.sh
 /etc/synolock/uninstall.sh
 /etc/synolock/watchdogtest.sh
 /usr/syno/synoman/crypted.log
 /usr/syno/synoman/decrypted.log
 /usr/syno/synoman/index.html
 /usr/syno/synoman/redirect.html
 /usr/syno/synoman/lock.png
 /usr/syno/synoman/style.css
 /usr/syno/synoman/synolockcode.txt
 /tmp/.SYNO_ENCRYPT_LOCK
 /tmp/.SYNO_DECRYPT_LOCK
 /tmp/.SYNO_SERVER_LOCK
 /tmp/.server
 /usr/syno/etc.defaults/rc.d/S99boot.sh
 /usr/syno/etc.defaults/rc.d/S99check.sh

 サンプルのハッシュ
 9ccd05d4afe6bedac7aa6695c78d5475df5f9b0d (server)
 c160c1fd18841ebb5e4186ef5ac7ef223b688bc4 (synosync)

 当社ではこれらをTrojan:Linux/SynoLocker.Aとして検知する。

 Post by Artturi (@lehtior2)