Slide 1

Slide 1 text

セキュリティっぽい話 ここ半年くらいで参加したイベントの話と、 セキュリティっぽい話をします Fukuoka.go#21 rhykw

Slide 2

Slide 2 text

ここ半年くらいで参加したイベント - 2024/10 Hardening 2024 Convolutions - 堅牢化競技会(参加) - 2024/11 JPAAWG 7th General Meeting - 標的型攻撃メール訓練の話(発表) - 2025/01 Gopher's Gathering - 内製WAFの話(発表) - 2025/01 JANOG55 Meeting @Kyoto - メールのお困りごとの話(BoF) - 警察と通信事業者の協力のホンネ #2(発表)

Slide 3

Slide 3 text

ここ半年くらいで参加したイベント - セキュリティやabuse、電子メールに関するイベント多め - 会社の人やgoコミュニティの人と会うことが少ない - 怖くないのでぜひ皆様もご参加ください

Slide 4

Slide 4 text

本題。 セキュリティの話。

Slide 5

Slide 5 text

マルウェア入り偽物 OSSの話、 聞いたことありますよね?

Slide 6

Slide 6 text

sfujiwaraさんのblog記事で 知った人も多いかと思います

Slide 7

Slide 7 text

ぐぐってスター数見て ヨシ。 では危ない。 じゃ、どうすれば泣かずに済むか。

Slide 8

Slide 8 text

まず危ないコードを探してこないと実証で きないんでは? 探そう。

Slide 9

Slide 9 text

(注意)リポジトリの作成時期とスター 数から探しましたがこの条件が必ず 当てはまるとは限りません

Slide 10

Slide 10 text

とりあえずソースを見てみる 同じようなコードを meagerbrake/ps の cmd/ps/ps.go に発見。  (なお、 このリポジトリは既に停止済み)

Slide 11

Slide 11 text

試しにgosecを掛けてみよう インストール

Slide 12

Slide 12 text

子プロセスの起動に変数を使ったことで 検出された (悪いとは限らない )

Slide 13

Slide 13 text

コードが何をしてるのか Geminiに訊いた (いろいろ説明してくれたけど省略) 結論: このコードは、文字列配列から特定の文字列を組み立て、シェルコマンドとして 実行するものです。コードの可読性とセキュリティ上のリスクが高いため、改善 が必要です。

Slide 14

Slide 14 text

マルウェアやで、とは 言ってくれないんだな

Slide 15

Slide 15 text

訊き方を変えました 不審な点ない?とちゃんと訊きましょう。誘導尋問した感は否めませんが以下 の解答を得ました。 セキュリティの観点から、このコードは非常に危険です。なぜなら、信頼できな いソースからスクリプトをダウンロードして実行しているからです。このスクリプ トが悪意のあるコードを含んでいる場合、システムが侵害される可能性があり ます。

Slide 16

Slide 16 text

うまく検知出来ないか Geminiに頼んだ このコードはgolangで書かれたアプリケーションから抜き出した実際のコード です。 oPgVRQnx には常にnilしか渡らないことから、BPmKwSiw関数内の exec.Commandを実行させることが目的だと思われます。 また、 exec.Commandに渡す文字列を難読化していることが分かります。 astを 使ってこれらの特徴をスコアリングするコードを書いてください。

Slide 17

Slide 17 text

与えられたGo言語コードの特性を AST(Abstract Syntax Tree:抽象構文木)を使ってスコアリングする コードを作成します。具体的には、以下の特徴をスコアリングします。 - 難読化された文字列の利用 : 文字列配列から文字列を組み立てているかどうか。配列のインデッ クスが規則的でないかどうか。 - exec.Command の利用: exec.Command 関数が使用されているかどうか。 - 初期化時の実行: init関数内で実行されているか否か。グローバル変数宣言時に実行されている か否か。 - nilが常に返されているか。 : 関数内でnilが常にreturnされているか

Slide 18

Slide 18 text

出来たコードがこちら https://go.dev/play/p/5gRAEBanq2a

Slide 19

Slide 19 text

まとめ - 既存のコードをコピーして悪性のコードを混入しているリポジトリが大量に ある - 今のところ特徴があるので簡単なコードでチェック出来る - もっと良い方法があれば教えて