リバースエンジニアリングとは?セキュリティでの活用と違法になるケース|サイバーセキュリティ.com

リバースエンジニアリングとは?セキュリティでの活用と違法になるケース



リバースエンジニアリングとは、完成した製品やソフトウェアを分析し、その仕組みや設計を明らかにする手法です。ものづくりの現場だけでなく、マルウェアの解析や脆弱性の発見など、セキュリティの分野でも欠かせない技術になっています。

一方で、やり方や目的によっては法律や契約に反するおそれもあります。この記事では、リバースエンジニアリングの手法とセキュリティでの活用、違法になるケース、自社のアプリを解析から守る対策を解説します。

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

製品を分析して仕組みを明らかにする手法

リバースエンジニアリング(Reverse Engineering)とは、すでに完成している製品やソフトウェアを分解・分析して、その構造や仕組み、製造方法などの技術情報を明らかにする手法です。日本語では「逆行工学」と訳されることもあります。

通常の開発は「設計→製造→完成品」という順に進みますが、リバースエンジニアリングは「完成品→分析→設計の情報」と逆の順にたどります。この「逆(リバース)」の流れが、名前の由来です。

ハードウェアとソフトウェアのリバースエンジニアリング

リバースエンジニアリングは、対象によって大きく2つに分けられます。ハードウェアのリバースエンジニアリングでは、機械や電子機器を分解したり、測定したりして、構造や回路、製造方法を調べます。
ものづくりの業界では、図面のない部品を3Dスキャナーで測定し、設計データを作り直すことも指します。

ソフトウェアのリバースエンジニアリングでは、プログラムを分析して、どのように動いているのかを明らかにします。仕様書では公開されていない動作を調べたり、マルウェアの機能を解き明かしたりするのに使われ、セキュリティの分野で特に重要な技術です。

良い使い方と悪い使い方の両面がある

リバースエンジニアリングというと、他社の技術を盗み出すといった悪いイメージを持たれがちです。実際に、製品をそのまま複製した模倣品の製造や、攻撃者による脆弱性探しに悪用されることもあります。

一方で、マルウェアの解析や自社製品の脆弱性の発見、失われた設計図の復元など、正当で社会に役立つ使い方も数多くあります。リバースエンジニアリングは技術そのものに善悪があるのではなく、目的と使い方によって評価が分かれる手法です。

リバースエンジニアリングの主な手法

ハードウェア:分解・3Dスキャナー・CTスキャン

ハードウェアのリバースエンジニアリングでは、製品を分解して部品や回路を調べるほか、専用の機器を使って形状や内部の構造を測定します。
代表的なのが、物体の形を立体のデータとして取り込む3Dスキャナー、物体の寸法を高い精度で測る三次元測定機、X線で製品を壊さずに内部を撮影するCTスキャンです。

測定したデータは、専用のソフトウェアで設計に使えるCADデータに変換し、部品の再生産や設計の改良に役立てます。

ソフトウェア:逆アセンブルと逆コンパイル

私たちが使うソフトウェアの多くは、人が書いたプログラム(ソースコード)を、コンピューターが実行できる機械語に変換した形で配布されています。機械語は人が読むのが難しいため、ソフトウェアのリバースエンジニアリングでは、まず人が読める形に戻す作業を行います。

機械語を、命令の一つひとつがわかる「アセンブリ言語」に変換するのが逆アセンブル、元のプログラミング言語に近い形に戻すのが逆コンパイルです。どちらも元のソースコードを完全に再現できるわけではありませんが、処理の流れや仕組みを理解する手がかりになります。

静的解析と動的解析

ソフトウェアの解析には、プログラムを動かさずに調べる「静的解析」と、実際に動かして挙動を観察する「動的解析」の2つの方法があります。

方法 内容 特徴
静的解析 逆アセンブルなどでプログラムのコードを読み解く 隠れた機能まで詳しく調べられるが、時間と専門知識が必要
動的解析 プログラムを実際に動かし、通信やファイルの変化などを観察する 挙動を素早く把握できるが、条件がそろわないと動かない機能は見逃しやすい

実際の解析では、2つの方法を組み合わせて、効率よく全体像をつかみます。

AIで手軽になりつつある解析

近年は、生成AIの進歩により、逆コンパイルした複雑なコードの意味を説明させたり、解析の作業の一部を任せたりできるようになってきました。これまで高い専門性が必要だった解析が、以前より手軽に行えるようになりつつあります。

解析が手軽になると、正当な調査が効率化される一方で、悪用のハードルも下がります。「技術的にできる」ことと「やってよい」ことは別であり、解析が手軽になるほど、法律や契約を守ることの重要性が増しています。

セキュリティでのリバースエンジニアリングの活用

マルウェアの解析

セキュリティの分野で最も代表的な活用が、マルウェアの解析です。マルウェアの作成者がソースコードを公開することはないため、配布されたプログラムそのものを解析して、どのような動きをするのかを明らかにします。

解析によって、どこに情報を送っているのか、どのファイルを書き換えるのか、どうやって感染を広げるのかといったことがわかれば、検知の仕組みを作ったり、被害の範囲を調べたりできます。セキュリティ企業や組織のCSIRTなどが、日常的に行っている作業です。

自社製品の脆弱性の発見

攻撃者は、公開されている製品を解析して、攻撃に使える脆弱性を探します。そこで、開発した企業自身や、依頼を受けたセキュリティの専門家が、攻撃者と同じ視点で自社の製品を解析し、脆弱性がないかを確かめることがあります。

ソースコードを確認するだけでは見えにくい、配布された状態のプログラムの問題点を見つけられるため、より攻撃に強い製品づくりにつながります。

IoT機器やファームウェアの安全性の確認

ネットワークカメラやルーターなどのIoT機器は、内部のソフトウェア(ファームウェア)の詳細が公開されていないことがほとんどです。
企業が導入する機器の安全性を確かめるために、ファームウェアを解析して、初期パスワードの埋め込みや、不要な通信の有無などを調べることがあります。

互換性の確保や古いシステムの解明

異なる製品同士を連携させるために、相手の製品の通信の仕組みを解析して互換性を確保することがあります。また、開発した担当者がいなくなり、設計書も失われた古いシステムを刷新する際に、プログラムを解析して仕様を明らかにすることもあります。

マルウェア解析の進め方

表層解析で概要をつかむ

最初に行うのが、ファイルを動かさずに外から見える情報を調べる「表層解析」です。ファイルの種類や作成日時、ハッシュ値、ファイルの中に含まれる文字列などを確認します。

ハッシュ値をもとに、セキュリティ企業などが公開している脅威情報と照らし合わせれば、すでに知られているマルウェアかどうかを短時間で確かめられます。既知のものであれば、公開されている解析結果を活用できます。

隔離した環境で動かす動的解析

次に、マルウェアを実際に動かして、どのような挙動をするかを観察します。どこと通信しようとするか、どのファイルやシステムの設定を書き換えるかなどを記録します。

動的解析では、本物のマルウェアを動かすため、社内ネットワークや業務用の端末から完全に切り離した、解析専用の環境で行うことが絶対条件です。仮想環境や、マルウェアを自動で動かして挙動を記録する「サンドボックス」と呼ばれる仕組みがよく使われます。

コードを読み解く静的解析

動的解析だけでは、特定の条件でしか動かない機能や、解析されていることに気づくと動きを止める仕組みを見逃すことがあります。そこで、逆アセンブルや逆コンパイルでコードを読み、隠れた機能や暗号化の方法などを解き明かします。

静的解析には高い専門知識と時間が必要なため、表層解析や動的解析の結果をもとに、詳しく調べるべき部分に絞って行うのが一般的です。

解析結果を対策に生かす

解析で得られた情報は、実際の防御に生かしてこそ意味があります。マルウェアの通信先やファイルの特徴をもとに、検知のルールを作成したり、通信先を遮断したりします。

また、社内の端末に同じ特徴を持つファイルや通信の記録がないかを調べ、被害の範囲を確かめます。解析結果を、ほかの組織と共有することで、社会全体での被害の拡大を防ぐことにもつながります。

リバースエンジニアリングが違法になるケース

解析することだけで直ちに違法になるわけではない

仕組みを理解するために製品やソフトウェアを解析すること自体は、それだけで直ちに違法になるわけではありません。問題になるのは、解析の前にどのように対象を手に入れたか、解析の際に何をしたか、解析した結果をどう使ったかです。

ここでは、問題になりやすい法律や契約を順に紹介します。ただし、実際の判断は個別の事情によって変わるため、迷う場合は弁護士などの専門家に相談しましょう。

著作権法:プログラムの複製や改変

プログラムは著作物として、著作権法で保護されています。2019年1月に施行された改正著作権法では、情報の解析など、著作物の表現そのものを楽しむことを目的としない利用について、一定の条件のもとで著作権者の許可なく行えることが明確になりました。
文化庁の資料でも、プログラムのリバースエンジニアリングはこうした利用の例として挙げられています。

一方、解析したプログラムをそのまま複製したり、改変したものを配布・販売したりすれば、著作権の侵害になるおそれがあります。「解析して仕組みを理解すること」と「プログラムを複製して利用すること」は、法律上まったく別の扱いになる点に注意が必要です。

特許法:特許技術を使った製造・販売

特許権は、特許を取った発明を業として実施する権利を、特許権者に独占させるものです。特許法では、試験や研究のための実施には特許権の効力が及ばないとされており、製品を解析して技術を学ぶことが、直ちに特許権の侵害になるわけではありません。

しかし、解析で知った特許技術を使って、許可なく製品を製造・販売すれば、特許権の侵害になります。解析の結果を自社の製品に取り入れる際は、他社の特許に触れていないかを確認することが大切です。

不正競争防止法:営業秘密・形態の模倣・コピー防止の回避

不正競争防止法では、他社の営業秘密を、盗み出すなどの不正な手段で手に入れて使う行為が禁止されています。また、他社の商品の形態をそっくりまねた商品を販売する行為(いわゆるデッドコピー)も、一定の期間は規制の対象になります。

さらに、映像やソフトウェアのコピー防止などの技術的な制限を無効にする装置やプログラムを提供する行為なども規制されています。著作権法でも、こうした保護の仕組みを外す行為の一部が規制されているため、解析のために保護を外すことにも注意が必要です。

利用規約や契約で禁止されている場合

多くのソフトウェアやアプリ、Webサービスは、利用規約や使用許諾契約で、リバースエンジニアリングを禁止しています。法律上は問題にならない解析でも、契約で禁止されている行為を行えば契約違反となり、利用の停止や損害賠償を求められるおそれがあります。

解析を行う前に、対象の製品の利用規約やライセンスを必ず確認しましょう。オープンソースのソフトウェアのように、解析や改変が認められているものもあります。

クリーンルーム手法で権利侵害のリスクを下げる

他社製品と互換性のある製品を開発する際に、権利侵害のリスクを下げる方法として知られるのが「クリーンルーム手法」です。解析を担当するチームと、開発を担当するチームを完全に分け、解析チームは製品の外から見える動作や仕様だけを文書にまとめます。

開発チームは、その文書だけをもとに、独自に設計・開発を行います。開発チームが他社のコードに触れないことで、著作権の侵害を避けやすくなります。

自社のアプリを解析から守る対策

鍵やパスワードをアプリに埋め込まない

配布したアプリは、攻撃者の手元で自由に解析される前提で考える必要があります。アプリの中に、サービスにアクセスするための鍵やパスワードを埋め込んでいると、解析によって取り出され、悪用されるおそれがあります。

秘密にすべき情報は、アプリの中に置かず、サーバー側で安全に管理することが基本です。どうしてもアプリ側で扱う必要がある場合は、OSが提供する安全な保管の仕組みを使い、権限を必要最小限に絞りましょう。

重要な処理や判定はサーバー側で行う

料金の計算や利用権限の確認、ゲームの勝敗の判定など、改ざんされると困る処理を、利用者の端末上のアプリだけで行うのは危険です。解析によって処理を書き換えられ、不正に利用されるおそれがあるためです。

重要な処理や最終的な判定はサーバー側で行い、アプリから送られてきた情報は、サーバー側で必ず確認するようにしましょう。

難読化でコードを読みにくくする

難読化とは、プログラムの動きは変えずに、コードを人や解析ツールにとって読みにくい形に変換する対策です。関数や変数の名前を意味のない文字に置き換えたり、処理の流れを複雑にしたりします。多くの開発環境には、難読化のためのツールが用意されています。

ただし、難読化は解析にかかる時間と手間を増やすものであり、解析を完全に防げるわけではありません。ほかの対策と組み合わせて使いましょう。

暗号化や改ざん検知で保護する

プログラムの重要な部分を暗号化し、実行するときだけ元に戻すことで、解析を難しくする方法もあります。その際は、元に戻すための鍵の管理に注意が必要です。

あわせて、アプリが改ざんされていないかを起動時に確認する仕組みや、解析用のツールで動かされていることを検知する仕組みを取り入れると、改ざんされたアプリの不正な利用を防ぎやすくなります。

リバースエンジニアリングに関するよくある質問

Q. 他社製品を解析するときに気をつけることは?

まず、対象の製品の利用規約やライセンスで、解析が禁止されていないかを確認しましょう。そのうえで、解析の結果をそのまま複製したり、特許技術を無断で使ったり、他社の商品の形をそっくりまねたりしないよう注意が必要です。
互換性のある製品を作る場合は、クリーンルーム手法を取り入れると、権利侵害のリスクを下げられます。

Q. リエンジニアリングとの違いは?

リエンジニアリングは、企業の業務の進め方や組織を根本から見直し、作り直す経営の手法を指します。リバースエンジニアリングは、製品やソフトウェアを分析して仕組みを明らかにする技術の手法です。名前は似ていますが、意味はまったく異なります。

Q. 個人がアプリを解析するのは違法ですか?

解析することだけで直ちに違法になるわけではありませんが、多くのアプリは利用規約で解析を禁止しており、違反すれば契約違反になります。また、解析の結果を使ってアプリを改ざんし、不正な利用をしたり、改ざんしたアプリを配布したりすれば、法律に違反するおそれがあります。
学習の目的であれば、解析が認められているオープンソースのソフトウェアや、学習用に用意された教材を使いましょう。

Q. 代表的な解析ツールには何がありますか?

ソフトウェアの解析では、米国の国家安全保障局(NSA)がオープンソースとして公開している「Ghidra」や、商用の「IDA」などの逆アセンブル・逆コンパイルのツールが広く使われています。
ほかに、プログラムを1行ずつ動かして状態を確認するデバッガや、マルウェアを安全に動かすサンドボックスなども使われます。

Q. 難読化すれば解析を完全に防げますか?

完全には防げません。難読化は、解析にかかる時間と手間を増やすための対策です。時間をかければ解析される可能性はあるため、秘密の情報をアプリに埋め込まない、重要な処理をサーバー側で行うといった、解析されても困らない作りにすることが大切です。

まとめ

リバースエンジニアリングは、製品やソフトウェアを分析して仕組みを明らかにする手法で、マルウェアの解析や脆弱性の発見など、セキュリティの分野でも重要な役割を果たしています。

解析すること自体が直ちに違法になるわけではありませんが、利用規約による禁止、複製や特許技術の無断使用、コピー防止の回避などには注意が必要です。自社のアプリは解析される前提で、秘密の情報や重要な処理をサーバー側で守りましょう。

よくある質問

他社製品のリバースエンジニアリングをおこなうときに気をつけることは?

知的財産権の侵害に気をつけましょう。

リバースエンジニアリング自体は合法です。しかし、仮に解析したプログラムをそのまま複製し、自社製品に利用すると著作権法違反となります。さらに、不正競売防止法の「企業秘密」扱いされている技術を勝手に模倣することも、違法行為として禁止されています。

こういった権利侵害を回避するために用いられるのが、解析と開発でチームを分ける「クリーンルーム手法(クリーンルーム設計)」です。解析チームは、リバースエンジニアリングのみを担当。一方、開発チームは、解析で得られた外形的な情報をもとに、同様の働きをする製品を独自に再設計します。この方法なら、違反行為に抵触するリスクを最小限に抑えて、リバースエンジニアリングをおこなえます。

リバースエンジニアリングとリエンジニアリングの違いは?

リエンジニアリングは企業・組織の再設計を指し、リバースエンジニアリングはITや製造業における開発技術を意味します。

リエンジニアリングとは、企業改革のために従来の管理方法やシステムを見直し、再設計することです。リバースエンジニアリングとよく似た言葉なので混同されがちですが、意味は全く異なります。

SNSでもご購読できます。