【プログラム】コンパイルされたらもう分からん。ソースコードの中にトロイの木馬が仕込む方法とは  [896590257]

1 ::2021/11/17(水) 19:00:49.95 ID:4POqGyID0●.net ?PLT(21003)

見えない脆弱性をソースコードに埋め込む、プログラマーも欺く「トロイのソース」
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/

39 ::2021/11/17(水) 19:55:22.25 ID:BeE8eQoS0.net

いまどきはGithubから怪しいコード引っ張ってきて
動いたー、とかやってるビギナーがほとんどだろ。
いくらでも混入のリスクはある。

29 ::2021/11/17(水) 19:39:33.00 ID:8TIqg+/A0.net

>>25
有名な話だけど
昔、客の口座の計算されて消滅する端数を
全部自分の口座に送金するプログラム仕込んだ奴が居た

34 ::2021/11/17(水) 19:44:10.07 ID:vCD2aTyQ0.net

脳みそこねこね

94 ::2021/11/19(金) 11:42:50.10 ID:ai3dSJfI0.net

>>92
レビユーないなら堂々と仕込めばいいワケで、レビユーはやるけど「わかるコードは指摘するけど、わからないコードはまあいいや、オッケー」で通る会社だろなwww

96 ::2021/11/19(金) 12:04:45.05 ID:ftBVOpYD0.net

レビユー

105 ::2021/11/19(金) 15:22:11.20 ID:EZL1gn3F0.net

ソースコードにいれんの??

114 ::2021/11/19(金) 17:28:32.66 ID:IETy5VtI0.net

名前って人の名前とは違うの?海外の話?

28 ::2021/11/17(水) 19:37:50.70 ID:u0VVnRX70.net

>>7
10 INPUT A
20 INPUT B
30 PRINT C
40 END

80 ::2021/11/18(木) 08:23:32.56 ID:m89lfs9a0.net

>>78
組み込み制御だけど、今でも初期化モジュールはアセンブラだよ。

マイコンが立ち上がった直後はC言語がまだ使えないんで、アセンブラで書くしかない。
クロックやデバイスやスタックなどを一通り設定すると、コンパイラメーカーが提供してるC言語の初期化モジュールをコールできるんで、その後はCで書ける。
昨今はCで書いた方が速度的に早いんで、割り込み処理であってもCで書いてる。

アセンブラと言っても初期化処理では凝った処理は無いし、過去資産を修正するだけだけどね。

51 ::2021/11/17(水) 20:16:36.92 ID:A4B7fPe+0.net

確かにコメントなら楽に仕込めるね
>>31
そんななら笑って許せる
怖いのは情報の流出
安全にかかわる

81 ::2021/11/18(木) 08:37:21.29 ID:m89lfs9a0.net

>>77
コードレビューもそうだけど、よくわからないコードを「わからないけどいいや」で通すことは無いし、ベテランであるレビュアー(レビューする人)が理解できないコードは将来的なメンテを考慮してNGにする。

あとアセンブラが必要な処理はアセンブラでちゃんと書く。>>80
その方が異なるマイコンに移植する時が「これは使えんな」とわかりやすいw

少なくても>>2のコードがレビユーを通ることは無い。

37 ::2021/11/17(水) 19:50:53.96 ID:OFtkXEmi0.net

>>35
アセンブラ読める人材どれだけいるんだよ

37 ::2021/11/17(水) 19:50:53.96 ID:OFtkXEmi0.net

>>35
アセンブラ読める人材どれだけいるんだよ

22 ::2021/11/17(水) 19:26:56.07 ID:YC+2SH/J0.net

逆アセンブラして読むに決まってるだろ。
ナメちゃいかんよw

132 ::2021/11/20(土) 02:12:57.34 ID:19hMfsvS0.net

>>112
今はDEPがあるから実行できないぞ

55 ::2021/11/17(水) 20:23:43.44 ID:1UJy3Hyx0.net

ガチでこういうセキュリティ仕事にしてたが
今のアセンブラってもう読めねえ
ebxまでで限界
rbxにxmmだのもうアセンブラを生で読むの無理ゲーすぎ
AIのパターンマッチでバイナリから怪しいバイト列とかを検出するのがあるから最近じゃそういうので検出するしかないと思うわ
そもそも制御コード入れてもcui系のエディタだと^[[何とかにエスケープされるとおもうが設定次第なんかな
最近のelectronベースのエディタは騙せそうね

74 ::2021/11/18(木) 02:06:44.04 ID:0yq9gFqe0.net

ぷよまん食べたかった

92 ::2021/11/19(金) 04:49:57.97 ID:f6HS3Riw0.net

どんな管理してたら仕込まれるんだよアホか

43 ::2021/11/17(水) 20:12:26.96 ID:ZQjocbHd0.net

結局ソースの解析しないとわからんのよ。
うだうだ言う前に怪しいソフトは使わないのが吉。

110 ::2021/11/19(金) 16:22:15.66 ID:NQIees9r0.net

>>29
それのソースは見たことないけど、自分の口座番号が書いてあるはずだからそれを発見されたら逮捕されると
わかってたはず。それを隠す特殊な方法使ったとしたらけっこう賢い。

125 ::2021/11/19(金) 21:00:18.90 ID:IIui+x9E0.net

>>113
面白い

93 ::2021/11/19(金) 11:09:46.75 ID:d/OFOt3X0.net

もう全部のアプリをGithubで自前ビルドさせりゃええわ
ちょうどVisualStudio2022も出たしな

88 ::2021/11/18(木) 10:11:33.57 ID:bTs977Rl0.net

>>13
8bitの時代は1バイトずらすと全然違う意味のコードになるようにしといて逆アセンブラをだますとか色んなテクニックがあったな

118 ::2021/11/19(金) 18:59:51.99 ID:gUmK0v4t0.net

8086 CPU のアセンブリ言語はニーモニック言語だった記憶

LB1
(処理コマンド)
LAD GR1,1,GR1
CPA GR1,N
JMI LB1

今のH8 CPU だとアセンブリ言語はC言語なんだっけな

main{}
{
int i:
for ( i=0: i<10: i++ ){
(処理コマンド)
}
}

3 ::2021/11/17(水) 19:01:21.68 ID:eaCzgilr0.net

コンパイルってぷよぷよだろ?

67 ::2021/11/17(水) 21:45:49.94 ID:HPIIE8PR0.net

ファイアー
アイスストーム

2 ::2021/11/17(水) 19:01:05.09 ID:4POqGyID0.net ?PLT(20003)

>>1の続き

C言語によるTrojan Sourceの例。これは実際のソースコード。色が付いているのが制御文字。
制御文字はすべてコメントに収められている。

上のソースコードをテキストエディターなどで表示した例。制御文字により、実際には
コメント中にある条件文「if ( isAdmin )」がコードに含まれているように見える。

61 ::2021/11/17(水) 21:22:55.39 ID:TJL9QGOB0.net

>>37
常識的に考えてやる意味がないw
苦行マゾの類いでも手を出さない

104 ::2021/11/19(金) 15:20:02.48 ID:QZzg2cP00.net

勇気と愛気

78 ::2021/11/18(木) 08:08:03.58 ID:KtlVp7o80.net

>>37
昔読んだ小説にアセンブラで直接プログラミングするキャラいたな
大天才って設定だったから普通の人間には無理だろな

131 ::2021/11/19(金) 23:28:54.63 ID:QrFO1/nP0.net

>>115
ありがとう
日本の話だと思ってた

59 ::2021/11/17(水) 20:50:23.80 ID:QI25lp3E0.net

バイナリでデータ列として埋め込む

101 ::2021/11/19(金) 13:54:39.36 ID:O7cwCunV0.net

>>89
あいつはもう消した(全消し)

128 ::2021/11/19(金) 21:26:58.45 ID:vak46bXu0.net

00がnopだからROMでも取り敢えず潰せばnopになるのがパッチ当てるのに便利だった

98 ::2021/11/19(金) 13:13:01.31 ID:8ImWTDz50.net

>>19
日経だぞw
あのwilltyですら騙されて記事にする程度の技術知識しかない無能系が記者やってんだぞ

130 ::2021/11/19(金) 22:14:10.62 ID:Gn0JV9h70.net

EXX

14 ::2021/11/17(水) 19:07:58.89 ID:2EDgJOHz0.net

エスケープシーケンス!

48 ::2021/11/17(水) 20:15:06.59 ID:ZQjocbHd0.net

>>32
それは無い。ウィルスだからそれww

89 ::2021/11/18(木) 15:01:45.00 ID:sgLUncWn0.net

ばよえ〜ん

65 ::2021/11/17(水) 21:38:08.72 ID:OiMi9R3U0.net

>>58
インタープリタでも関係ねーわ

54 ::2021/11/17(水) 20:23:12.44 ID:vTOdEV5X0.net

FFTの続編待ってる

112 ::2021/11/19(金) 16:43:47.96 ID:KMS7GpsF0.net

>>105
データセクションに

.data
db ういるす
でコンパイルするって事かな

85 ::2021/11/18(木) 09:43:24.32 ID:78nEI0Ag0.net

>>こういった制御文字をうまく組み合わせれば

それが難しいんだよ

111 ::2021/11/19(金) 16:28:44.12 ID:NQIees9r0.net

>>78
えーとね、アセンブラで書くと言っても当然書きやすいように工夫するんだよ。
マクロ使って書くとアセンブラでもCみたいな制御構文が書けるし、代入もMOVじゃなくて = で書けるようにして、
一見すると高級言語みたいなソースにすることができる。

69 ::2021/11/17(水) 22:02:41.00 ID:Fp1EAm1f0.net

具体的な経路はどうするの?
パッケージライブラリとかに仕込むの?

45 ::2021/11/17(水) 20:13:24.68 ID:nW53XIKt0.net

色気で魔物を騙す!

95 ::2021/11/19(金) 11:43:37.45 ID:fU+6M1F80.net

廣島のビルゲイツ

90 ::2021/11/18(木) 23:08:14.86 ID:A8FvXDzp0.net

マシン語ネイティブの俺ならダンプリストで解析可能だが?
なんならチェックサムだけでもうっすらわかるが?

12 ::2021/11/17(水) 19:07:11.39 ID:dB/XweRw0.net

コンパイルダーオン

71 ::2021/11/17(水) 23:21:33.78 ID:aKSmpRYG0.net

機械語を話せるサイボーグプログラマなら判別できるんじゃねえか?

おすすめの記事