見えない脆弱性をソースコードに埋め込む、プログラマーも欺く「トロイのソース」
2021.11.17 日経クロステック
プログラムに埋め込まれた脆弱性やマルウエア(コンピューターウイルス)などを見つける有効な手段の1つが、そのソースコードを丹念に調べること。スキルのある開発者なら、ソースコードを調べることで異常に気づける。
だが、そういった開発者の目を欺く手法が発表された。ソースコードに細工を施せば、テキストエディターなどで表示されるソースコードの「見た目」を変えられるというのだ。言い方を変えれば、目に見えない脆弱性を埋め込めるという。そんなことが可能なのだろうか。
■「トロイの木馬」のソースコード版
この新手法は、英ケンブリッジ大学の研究者らが2021年11月1日(現地時間)に発表した。「Trojan Source」と名付けられた。Trojan Horse:トロイの木馬」にちなんだ命名だと考えられる。ソースコードに仕込んだ脆弱性を、どのようにして開発者に気づかれないようにするのか。答えは単純。
■Unicodeを使う
「Unicodeの制御文字」を使ってソースコードの見た目を変えるのだ。Unicodeとは文字コードの一種。文字を扱うプログラムのほとんどが対応している。制御文字とは、ディスプレーやプリンター、通信装置などに特別な動作をさせるための文字である。「文字」といっても、標準ではディスプレーなどには表示されない。そのほか1文字単位ではなくブロック単位で文字の表示を入れ替える制御文字などもある。こういった制御文字をうまく組み合わせれば、脆弱性が埋め込まれたソースコードを、問題のないソースコードに見せかけることが可能になる。
■コメントや変数に忍ばせる
一般的なプログラミング言語では、ソースコードの任意の場所に制御文字を挿入できない。コンパイラーによる変換時(コンパイル時)にエラーが発生する。ただし、コメントと文字列は例外だ。これらはコンパイラーによって解釈されないので、制御文字を含む任意の文字を入れられる。そこで、コメントや文字列に制御文字を入れることで、それらをソースコードの一部に見せかけたり、ソースコードがコメントアウトされているように見せかけたりする。
https://xtech.nikkei.com/atcl/nxt/column/18/00676/111300092/
>>1の続き
https://cdn-xtech.nikkei.com/atcl/nxt/column/18/00676/111300092/c1.png
C言語によるTrojan Sourceの例。これは実際のソースコード。色が付いているのが制御文字。
制御文字はすべてコメントに収められている。
https://cdn-xtech.nikkei.com/atcl/nxt/column/18/00676/111300092/c2.png
上のソースコードをテキストエディターなどで表示した例。制御文字により、実際には
コメント中にある条件文「if ( isAdmin )」がコードに含まれているように見える。
>>2
こんな怪しいコメントレビューとおんねえわw
どんだけ低レベルな現場だよ
プログラム自身を書き換えればいい
怪しいと思ったら逆コンパイルせんの
ソースコードにトロイやマルウェアを入れるなんて開発者ぐらいしか出来んと思うけどw
>>19
パチンコとか銀行関係に仕込めりゃ儲かるやん
>>25
有名な話だけど
昔、客の口座の計算されて消滅する端数を
全部自分の口座に送金するプログラム仕込んだ奴が居た
逆アセンブラして読むに決まってるだろ。
ナメちゃいかんよw
ロシア製のクラック版とかにつかわれてるんだろうな
つまり割るなってことだ
>>21
昔はWinのクラックバージョンとかに仕込まれまくってたんだろうな
複雑なことする必要はなくてちょっとセキュリティホールを作っとけばいいんだろうな。
裏でマイニングさせられるらしいな
確かにコメントなら楽に仕込めるね
>>31
そんななら笑って許せる
怖いのは情報の流出
安全にかかわる
いまどきはGithubから怪しいコード引っ張ってきて
動いたー、とかやってるビギナーがほとんどだろ。
いくらでも混入のリスクはある。
逆アセすればいいじゃん。そのプログラムで使わない
ような関数呼んでたり、ファイルパスの文字列あったり
したら怪しいわけで(´・ω・`)
>>35
アセンブラ読める人材どれだけいるんだよ
>>37
俺読めるけど絶対に読みたくない。東京から
伊豆までチャリで行けって言われてるようなもん。
>>37
常識的に考えてやる意味がないw
苦行マゾの類いでも手を出さない
組み込みのitronとか
ほぼブラックボックス的に使うミドルウェア
この辺りに仕込まれてたらIoT関連死亡だな
ガチでこういうセキュリティ仕事にしてたが
今のアセンブラってもう読めねえ
ebxまでで限界
rbxにxmmだのもうアセンブラを生で読むの無理ゲーすぎ
AIのパターンマッチでバイナリから怪しいバイト列とかを検出するのがあるから最近じゃそういうので検出するしかないと思うわ
そもそも制御コード入れてもcui系のエディタだと^[[何とかにエスケープされるとおもうが設定次第なんかな
最近のelectronベースのエディタは騙せそうね
>>55
そこまで行くとOSやBIOSに組み込まない限りOSが起動時にクリアしてしまうから出来んのじゃないかな、今は。
>>56
OSやBIOSに組み込まれてる
某国製PC…
結局ソースの解析しないとわからんのよ。
うだうだ言う前に怪しいソフトは使わないのが吉。