【プログラム】コンパイルされたらもう分からん。ソースコードの中にトロイの木馬が仕込む方法とは [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/

87 ::2021/11/18(木) 09:48:59.73 ID:Zln8bb8I0.net

yamauchi

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++ ){
(処理コマンド)
}
}

52 ::2021/11/17(水) 20:18:38.06 ID:NpObp4Jy0.net

第2リール停止後にレバー逆押し3回やってからマックスベット叩いて第3リール叩くと有利区間ランプ消えるで

10 ::2021/11/17(水) 19:06:17.76 ID:Pt/TACfV0.net

>>6
それ書こうと思ったのに!

13 ::2021/11/17(水) 19:07:37.13 ID:kIo48R930.net

プログラム自身を書き換えればいい

60 ::2021/11/17(水) 21:14:01.94 ID:youw7+/+0.net

IDEのエディタは制御コードを無視するしかないかな?

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

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

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

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

35 ::2021/11/17(水) 19:46:44.56 ID:CPkK+KoO0.net

逆アセすればいいじゃん。そのプログラムで使わない
ような関数呼んでたり、ファイルパスの文字列あったり
したら怪しいわけで(´・ω・`)

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

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

129 ::2021/11/19(金) 21:59:45.58 ID:Hn9h869d0.net

>>126
ブランクエリアの0FFhはRST 38hになるけど当時は意味がわからなかった
一種のソフトウェア割り込みでMS-DOSのint 21hみたいなものだったんだな

123 ::2021/11/19(金) 20:49:39.12 ID:IIui+x9E0.net

>>29
スーパーマン映画のヤツだな

66 ::2021/11/17(水) 21:39:03.06 ID:hg7k9u1W0.net

今時、セクターウィルスなんて作れる奴いないしな。

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

勇気と愛気

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

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

18 ::2021/11/17(水) 19:13:25.21 ID:7+34hBAB0.net

怪しいと思ったら逆コンパイルせんの

25 ::2021/11/17(水) 19:32:53.23 ID:C/CYvufO0.net

>>19
パチンコとか銀行関係に仕込めりゃ儲かるやん

4 ::2021/11/17(水) 19:02:13.88 ID:foqxMMYS0.net

ウイルスバスター入ってるから大丈夫だべ

33 ::2021/11/17(水) 19:43:27.70 ID:rClr5po/0.net

>>2
こんな怪しいコメントレビューとおんねえわw
どんだけ低レベルな現場だよ

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

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

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

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

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

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

124 ::2021/11/19(金) 20:58:19.68 ID:B+ZZOZeh0.net

Z80ならヘキサコードを直接読み書きできる人は普通にいた。
底辺な俺でも未だに主要な命令はヘキサで読める。

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

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

103 ::2021/11/19(金) 15:18:42.74 ID:aZJOS4/h0.net

8086とかZ80ならなんとか

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

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

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

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

121 ::2021/11/19(金) 20:15:59.73 ID:ai3dSJfI0.net

>>119
すっげえ昔に使っただけなので記憶の外なんだが、8086にLAD命令なんてあったっけ?

lbl:
 mov AX,10
 dec AX
 jnz lbl

なイメージ

113 ::2021/11/19(金) 16:45:35.35 ID:ai3dSJfI0.net

>>110
>>29は結構有名な話だけど、その銀行のエンジニアである犯人は架空口座として特殊な名前(ZZZだったかな?)を作り、ここに、四捨五入で切り捨てられる額を振り込んでたんだけど、境界テストをしてたプログラマが毎回テストにかかる最終名称が「こんな名前の人いるんだ?」と不思議がったのが発端でバレた。
MMMならバレなかったかもしれないw

27 ::2021/11/17(水) 19:35:14.40 ID:RL3wLcdz0.net

へえ知らなかった
Shift-JIS最強なのか

46 ::2021/11/17(水) 20:13:33.96 ID:K0oL9exC0.net

新卒で応募して落ちたがまあその後潰れたし良かったかも

64 ::2021/11/17(水) 21:37:05.66 ID:CtFTldoJ0.net

>>58
事故ってて草

5 ::2021/11/17(水) 19:02:33.20 ID:cUbpxLyt0.net

詳しくねーんだけどさ、目的なんなの?ウィルスの。愉快犯?

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

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

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

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

40 ::2021/11/17(水) 20:03:39.98 ID:xaxmVFYm0.net

テキストエディタが制御文字に対応し過ぎなのがまずいんかね
プログラミング用のエディタなら制御文字なんてその機能は無視して絵や記号で表示するだけにすればいいのに

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

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

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

脳みそこねこね

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

廣島のビルゲイツ

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

レビユー

82 ::2021/11/18(木) 08:39:12.40 ID:c2G7YnD40.net

コンパイルしなくても動くPerl最高だよな

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

ばよえ〜ん

126 ::2021/11/19(金) 21:17:49.41 ID:ai3dSJfI0.net

>>124
暗記モード。
CDがコール命令、FEが分岐かなんかw
覚えてるのはそんくらいかwww

32 ::2021/11/17(水) 19:42:46.54 ID:sSnDOLTf0.net

コンパイラそのものがトロイの木馬を埋め込む時代が来る

56 ::2021/11/17(水) 20:33:12.59 ID:hg7k9u1W0.net

>>55
そこまで行くとOSやBIOSに組み込まない限りOSが起動時にクリアしてしまうから出来んのじゃないかな、今は。

119 ::2021/11/19(金) 19:04:48.73 ID:W6jPw69t0.net

>>118
頭痛が痛い、みたいな文章になってるぞ。
無理すんな。

6 ::2021/11/17(水) 19:04:12.79 ID:k2P6+p6I0.net

の〜みそこねこね

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

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

30 ::2021/11/17(水) 19:40:46.56 ID:VsDX+3Pr0.net

複雑なことする必要はなくてちょっとセキュリティホールを作っとけばいいんだろうな。

20 ::2021/11/17(水) 19:14:38.29 ID:t1tjaAF/0.net

バレても饅頭で揉み消すってこと?

42 ::2021/11/17(水) 20:12:15.68 ID:GABp0qwo0.net

void *po = null;
if (po == null) gaxtu();