連載
» 2018年01月15日 05時00分 公開

リバースエンジニアリングとは

リバースエンジニアリングとは、ソフトウェア/ハードウェア製品の構造を分析し、製造方法や構成部品、動作やソースコードなどの技術情報を調査し明らかにすることだ。

[セキュリティ・キャンプ実施協議会,@IT]

 リバースエンジニアリングとは、ソフトウェア/ハードウェア製品の構造を分析し、製造方法や構成部品、動作やソースコードなどの技術情報を調査し明らかにすることだ。技術情報は、製品の不正コピーや、脆弱(ぜいじゃく)性の悪用といった目的で利用されることもあるが、自社製品のバグ修正や脆弱性の発見などセキュリティ対策に活用されることもある。

 ICチップなどのハードウェア製品を対象にしたリバースエンジニアリングは、物理的に分解、観察することで内部構成情報を取得し回路パターンを明らかにする。その結果、回路図の再構成や物理的な攻撃箇所の特定に悪用される可能性がある。

 ソフトウェアを対象にした場合は、実行ファイル(オブジェクトコード)を逆アセンブル・逆コンパイルすることでソースコードまでさかのぼって解析することができ、仕様書では明らかにされていないような、詳細な技術情報を得ることが可能だ。

 リバースエンジニアリングはさまざまな用途で行われる。例えば、技術ノウハウを獲得したり自社製品との互換性を確保したりする目的で他社製品を解析することもある。また、製品の脆弱性探しといった攻撃の事前調査や、製品の著作権保護機能の無効化など不正行為を目的とすることもある。一方で、バグ修正や脆弱性パッチ開発、マルウェア解析による脅威の分析といった、セキュリティ対策用途で行われる場合も多い。

 リバースエンジニアリング技術を悪用した不正行為を抑止するため、開発者が製品に対してリバースエンジニアリング対策を施す場合がある。

 ソフトウェア製品を対象にしたリバースエンジニアリング対策の代表的なものが「難読化」だ。難読化にはさまざまな手法があり、ダミーコードによる制御フローの難読化はその一例である。これは、無意味な命令列(ダミーコード)をオリジナルのプログラムに挿入することで解析作業を煩雑にする手法である。また、リバースエンジニアリングは専用のデバッガを通じて行われることも多いため、デバッガの監視下にあることを検知し、制御フローを変える「アンチデバッグ機能」が組み込まれることもある。

 これらの解析妨害機能は、解析コストを上げるという点で有効な手段だが、高度な技術や経験を積んだ解析者ならば無効化できる場合も多く、完全にリバースエンジニアリングを防げるわけではない。また近年では、これらのリバースエンジニアリング対策は、製品の開発者だけではなくマルウェア開発者によってマルウェア解析を遅らせる目的で使用される場合も多い。

 なお、逆アセンブル・逆コンパイルで得られるソースコードは実質的に元のプログラムのソースコードと類似するため、複製であると見なされる。そのため、得られたソースコードを直接自社製品の開発などに流用した場合、元のプログラムの著作権を侵害する可能性が高い。このように、技術ノウハウの獲得や互換性の確保といった目的で他社製品に対してリバースエンジニアリングを行う場合は、著作権や特許権といった知的財産権の侵害に気を付ける必要がある。リバースエンジニアリングにかかわる法的制限は技術の発展の妨げになるとして、政府によって法制度の整備が何年も議論され続けているが、2018年1月現在まだ立法化には至っていない。

関連用語

脆弱性

■更新履歴

【2004/1/1】初版公開。

【2018/1/15】最新情報に合わせて内容を書き直しました(セキュリティ・キャンプ実施協議会 著)。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。