← Blog

セキュリティ・キャンプ2026 X1ゼミ応募課題

セキュリティ・キャンプ2026 X1ゼミに提出した応募課題

今更セキュリティキャンプの応募課題晒し

今回が初めてのセキュリティキャンプへの応募ということで全く通る自信はなかったのですが、幸運なことに?通ってしまいました。 セキュリティキャンプで学ぶ機会を得られたことに感謝しています。

なぜこのゼミを選んだのか

数ある中でこのX1ゼミを選んだのは、ソフトウェアとハードウェアのどちらにも触れてみたいと思ったからです。第2第3希望も開発コースのX2,X3と選びましたが、そちらは提出できませんでした。 というのも、応募課題に着手し始めたのが締切の3日前とかで何も知らなかった私は1日1課題やろうなどと考えていたため当然時間が足りず提出しませんでした。 心が折れそうになりながらもなんとか丸3日かけて提出締切りの5分前とかに提出しました。

本編

X1:IoT/組込み機器のリバースエンジニアリングゼミ(5 KB)

問1


低消費電力で動作するあるIoT機器の消費電流を、オシロスコープを用いて測定しようとしています。この機器は、スリープ時には 1μA、無線通信時には 100mA の電流が流れます。電源電圧は 3.3V ですが、電圧が 2.7V を下回るとマイコンがブラウンアウトリセットしてしまいます。 測定のために電源ラインに抵抗 R を直列に挿入し、その両端の電圧降下をオシロスコープで観測することにしました。ただし、使用するオシロスコープの感度限界により、精度良く測定できる電圧の下限は 1mV です。

(1)


「無線通信中にマイコンがリセットしない」ことと「スリープ時の電流をノイズに埋もれさせずに観測する」ことを両立できる抵抗値 R は存在しますか。数式などを用いて論理的に説明してください。

スリープ時に抵抗を流れる電流をIsrI_{sr}、電圧をVsrV_{sr}、抵抗をRsrR_{sr}、とし、マイコンを流れる電流をIsmI_{sm}、電圧をVsmV_{sm}、抵抗をRsmR_{sm}とし、電源の電圧をEsE_sとする。 抵抗は電源に対し直列に接続されているため、以下の式が成立する。

Isr=Ism=1μA(i)I_{sr} = I_{sm} = 1\,\mu\mathrm{A} \tag{i}

オシロスコープは抵抗と並列につながれるため、オシロスコープの感度限界に合わせるには以下を満たす必要がある。Vsr1mVV_{sr} \ge 1\,\mathrm{mV} (ii) また Vsr+Vsm=EV_{sr} + V_{sm} = E でありVsmV_{sm}はブラウンアウトリセットを回避するために、2.7V 以上の電圧を維持する必要があるため、VsrV_{sr}は以下の条件も満たす必要がある。

Vsr3.32.7=0.6V(iii)V_{sr} \le 3.3 - 2.7 = 0.6\,\mathrm{V} \tag{iii}

(ii),(iii)よりスリープ時の抵抗における電圧の満たすべき条件は以下。

103Vsr0.6V(iv)10^{-3} \le V_{sr} \le 0.6\,\mathrm{V} \tag{iv}

(i),(iv)とオームの法則よりスリープ時の抵抗が満たすべき抵抗値RsrR_{sr}の条件は以下。

103106Rsr0.6106[Ω]\frac{\raisebox{0.12em}{\(10^{{\tiny -3}}\)}}{\raisebox{-0.12em}{\(10^{{\tiny -6}}\)}} \le R_{sr} \le \frac{\raisebox{0.12em}{\(0.6\)}}{\raisebox{-0.12em}{\(10^{{\tiny -6}}\)}}\,[\Omega] 103Rsr6×105[Ω](1)10^3 \le R_{sr} \le 6 \times 10^5\,[\Omega] \tag{1}

同様に無線通信時に抵抗を流れる電流をIirI_{ir}、電圧をVirV_{ir}、抵抗をRirR_{ir}、とし、マイコンを流れる電流をIimI_{im}、電圧をVimV_{im}、抵抗をRimR_{im}とし、電源の電圧をEiE_iとする。 抵抗は電源に対し直列に接続されているため、以下の式が成立する。

Iir=Iim=100mA(v)I_{ir} = I_{im} = 100\,\mathrm{mA} \tag{v}

オシロスコープは抵抗と並列につながれるため、オシロスコープの感度限界に合わせるには以下を満たす必要がある。

Vir1mV(vi)V_{ir} \ge 1\,\mathrm{mV} \tag{vi}

また、VirV_{ir}は以下の条件も満たす必要がある。

Vir3.32.7=0.6V(vii)V_{ir} \le 3.3 - 2.7 = 0.6\,\mathrm{V} \tag{vii}

(vi),(vii)より無線通信時の抵抗における電圧の満たすべき条件は以下。

103Vir0.6V(viii)10^{-3} \le V_{ir} \le 0.6\,\mathrm{V} \tag{viii}

(v),(viii)とオームの法則より無線通信時の抵抗が満たすべき抵抗値RirR_{ir}の条件は以下。

103100×103Rir0.6100×103[Ω]\frac{\raisebox{0.12em}{\(10^{{\tiny -3}}\)}}{\raisebox{-0.12em}{\(100 \times 10^{{\tiny -3}}\)}} \le R_{ir} \le \frac{\raisebox{0.12em}{\(0.6\)}}{\raisebox{-0.12em}{\(100 \times 10^{{\tiny -3}}\)}}\,[\Omega] 102Rir6[Ω](2)10^{-2} \le R_{ir} \le 6\,[\Omega] \tag{2}

式 (1)、(2) よりこれらを同時に抵抗値RRは存在しないため「無線通信中にマイコンがリセットしない」ことと「スリープ時の電流をノイズに埋もれさせずに観測する」ことを両立できる抵抗値 RR は存在しない。

(2)


あなたなら実務においてどのように工夫して無線通信時とスリープ時の電流を両立して測定しますか。考えられるアプローチ(回路的な工夫、測定手法の変更など)を自由に提案してください。

回路的な工夫

根本的な解決策として、スリープ時と無線通信時の電流レンジに合わせた測定抵抗をそれぞれ用意し、状態に合わせて切り替える方法が考えられる。例えば、1Ωと1kΩの抵抗を並列に配置し、その経路を電子スイッチで切り替える構成である。マイコンのGPIOピンによる制御や、コンパレータを用いて電流値の変動を検知して自動で切り替える回路を組むことで、オシロスコープの感度に合わせた適切な電圧降下を得ることができる。

別の方法として、PNP型のトランジスタを用いて回路を分岐・バイパスさせる構成も検討した。トランジスタのエミッタ・コレクタ間と並列になるように1kΩの抵抗R1を繋ぎ、ベース・コレクタ間に抵抗を接続して、電源とマイコンをエミッタとコレクタに接続する。 スリープ時(1μA)では、抵抗R1での電圧降下は1mVとなり、トランジスタがオンになるためのベース・エミッタ間電圧(約0.6V〜0.7V)に満たないため、電流はR1のみを流れて精度良く測定できる。 一方で、無線通信時(100mA)ではバイパス側に電流を流す必要があるが、そのためにはトランジスタで最低でも0.6V〜0.7Vの電圧降下を許容しなければならない。電源3.3Vから0.7V降下するとマイコンへの供給電圧は2.6Vとなり、ブラウンアウトリセットの下限である2.7Vを下回ってしまう。したがって、このトランジスタを用いた手法では実務に耐えうる安定した測定は実現できないという結論に至った。

測定手法の工夫

既存のオシロスコープを用いた測定系に限界があるため、電力プロファイラを使用する手法を考えた。測定用の抵抗とオシロスコープの代わりに、電力プロファイラを電源とマイコンの間に直列に挿入する(あるいはプロファイラ自体を電源としてマイコンに直接給電する)。電力プロファイラは内部で流れる電流に合わせて超高速で測定抵抗を自動切り替えするため、オシロスコープなしで、かつマイコンのリセットを引き起こすことなく、1μAから100mAまでの幅広いダイナミックレンジを正確に測定することが可能である。

問2


RH850マイコンから抽出したファームウェアを、リバースエンジニアリングツール(Ghidra)に読み込ませたところ、以下のバイト列の EA 以降が正しく認識されず、解析が停止してしまいました。

バイト列: 20 56 00 10 EA 0F 66 19 (※低位アドレスから順に表示)

(1)


リバースエンジニアリングツールが、このように特定の箇所で逆アセンブルを停止してしまう原因として、一般にどのような理由が考えられるか、複数挙げてください。

Ghidraが機械語を逆アセンブルする際には、読み込んだバイト列を、選択されたプロセッサ言語定義に基づいて命令として解釈し、対応するアセンブリ表現を表示する。この際、CPUごとの命令形式や命令の意味は、Ghidra内部ではSLEIGHによって各プロセッサ向けに定義されている。したがって、実際に解析を行う際に、ファームウェアのバイナリをGhidraへインポートするとき、自動で選択されたフォーマット、CPU、エンディアン、配置アドレス、言語設定などに誤りがあった場合、本来とは異なる命令定義を参照してしまい、特定のバイト列を有効な命令として解釈できず、逆アセンブルが停止する可能性がある。

また、プロセッサを正しく選択していた場合でも、使用しているGhidraのSLEIGH定義が、そのCPUの拡張命令、特権命令、メーカー独自命令、仮想化・ハイパーバイザ関連命令などに対応していない場合、該当バイト列を有効な命令として解釈できないことがある。この場合も、未定義命令として扱われたり、その箇所から先の解析が継続できなくなったりする可能性がある。

RH850G4MH User’s Manual: Software によれば、RH850 のCPU命令は基本的に16-bit formatおよび32-bit formatで表現され、命令によっては48-bit/64-bit formatをとるものもある。したがって、Ghidraのような逆アセンブラが命令長や命令境界を誤って解釈した場合、本来1つの命令として読むべきバイト列を途中で分割してしまい、以後の命令開始位置がずれる可能性がある。その結果、即値やデータ領域、あるいは命令の後半部分を別の命令であるかのように解釈しようとして、未定義命令・予約命令として扱われ、逆アセンブルが停止することがある。

さらに、難読化の内容によっては、生成される機械語や制御フローが通常とは異なる形になり、逆アセンブルに影響を与える場合がある。特に、ソースコード上の単純な名前変更などではなく、バイナリレベル・アセンブリレベルで難読化が施されている場合、コードとデータの混在、間接分岐、自己書き換えコード、実行時復号、不自然な命令境界などにより、Ghidraがコード領域や命令の開始位置を誤認する可能性がある。その結果、現在選択されているSLEIGH定義の命令パターンに一致しないバイト列として扱われたり、制御フローを正しく追跡できなかったりして、逆アセンブルが停止または未定義命令扱いになることがある。不自然な制御フロー、実行時展開などが用いられている場合も、静的解析ツールが正しく命令列を追跡できない原因となる。

(2)


調査の結果、このバイト列はハイパーバイザの実装におけるコードの一部であることが判明しました。RH850アーキテクチャの公開情報をもとにこの8バイトの正体を突き止めてください。回答にあたっては、特定したアセンブラ命令及びその特定プロセスを含めてください。

RH850アーキテクチャの公開情報として、以下の資料を参考にした。

  • RH850G4MH User’s Manual: Software
  • RH850G4MH Virtualization User’s Manual: Hardware
  • RH850G4MH Virtualization User’s Manual: Software

与えられたバイト列は以下である。

20 56 00 10 EA 0F 66 19

RH850G4MH User’s Manual: Software の Section 2.1.1 “CPU Instructions” によれば、CPU命令は基本的に 16ビット形式および 32ビット形式で表現され、一部に 48ビット形式および 64ビット形式も存在するとされている。したがって、ここでは 16ビット、すなわち 2バイトずつに分けて各命令形式と照合する。

元の 8バイト列は低位アドレスから順に表示されているため、リトルエンディアンで16ビット値として読むと、以下のようになる。

20 56 → 0x5620
00 10 → 0x1000
EA 0F → 0x0FEA
66 19 → 0x1966

まず、先頭の 4バイトについて確認する。

0x5620 = 01010 110001 00000 (2)
0x1000 = 0001 0000 0000 0000 (2)

0x5620 の 2進数表現を見ると、これは 2.2.3.54 MOVEA の命令形式と一致していることがわかる。また、MOVEA は 32ビット命令であるため、直後の 0x1000 までがこの命令に含まれる。

MOVEA の仕様は以下である。

[Instruction format]
MOVEA imm16, reg1, reg2

[Operation]
GR[reg2] ← GR[reg1] + sign-extend(imm16)

[Opcode]
rrrrr110001RRRRR iiiiiiiiiiiiiiii
(rrrrr ≠ 00000 (Do not specify r0 for reg2.)

Opcode の説明より、rrrrr が reg2、RRRRR が reg1 に対応していることがわかる。また、次の 2バイトが imm16 に対応する。今回の場合、レジスタと imm16 の値は以下のようになる。

rrrrr = 01010 より、reg2 = r10
RRRRR = 00000 より、reg1 = r0
imm16 = 0x1000

以上より、最初の 4バイトはアセンブリ言語では以下の命令で表される。

MOVEA 0x1000, r0, r10

この命令を実行すると、r10 レジスタには GR[r0] に即値 0x1000 を加えた値が格納される。

次に、残りの 4バイトについて確認する。

0x0FEA = 00001 111111 01010 (2)
0x1966 = 00011 001011 00110 (2)

これは 2.2.3.48 LDM.MP の命令形式と一致していることがわかる。

LDM.MP の仕様は以下である。

[Instruction format]
LDM.MP [reg1], eh-et

[Operation]
if (PSW.UM==0)
then
    if ( eh ≤ et )
    then
        cur ← eh
        end ← et
        tmp ← reg1
        while (cur ≤ end) {
            adr ← tmpNote 1, Note 2
            CheckException(MDP)
            MPLA[cur] ← Load-memory (adr, Word)
            tmp ← tmp + 4
            adr ← tmpNote 1, Note 2
            CheckException(MDP)
            MPUA[cur] ← Load-memory (adr, Word)
            tmp ← tmp + 4
            adr ← tmpNote 1, Note 2
            CheckException(MDP)
            MPAT[cur] ← Load-memory (adr, Word)
            tmp ← tmp + 4
            cur ← cur + 1
        }
    else
else

Note 1. The lower 2 bits of adr are masked by 0.
Note 2. An MDP exception may occur as a result of address calculation.

[Opcode]
rrrrr111111RRRRR wwwww00101100110

rrrrr indicates eh.
wwwww indicates et.
RRRRR indicates reg1.

Opcode より、今回の場合の eh、et、reg1 はそれぞれ以下の値を指していることがわかる。

eh = 1  (rrrrr = 00001)
reg1 = r10  (RRRRR = 01010)
et = 3  (wwwww = 00011)

以上より、後半の 4バイトはアセンブリ言語では以下の命令で表される。

LDM.MP [r10], 1-3

したがって、与えられた 8バイト列を逆アセンブルした結果は以下のようになる。

MOVEA  0x1000, r0, r10
LDM.MP [r10], 1-3

次に、LDM.MP の Operation を参照して、この命令がどのような処理を行うかを確認する。まず、以下の条件が確認される。

if (PSW.UM==0)
then

PSW.UM はユーザモードかどうかを示すビットであり、PSW.UM==0 の場合は特権モード、PSW.UM==1 の場合はユーザモードである。LDM.MP は SV privilege instruction であるため、ユーザモードでは実行できない。次に、以下の条件が確認される。

if ( eh ≤ et )
then

今回の場合、eh = 1、et = 3 であるため、この条件は真である。eh と et は MPU エントリ番号の範囲を指定する値であり、eh > et の場合は処理が行われない。続いて、以下の処理が行われる。

cur ← eh
end ← et
tmp ← reg1

ここでは、cur に 1、end に 3、tmp に reg1、すなわち r10 レジスタの内容が入る。そして直前の命令は以下である。

MOVEA 0x1000, r0, r10

RH850 では r0 はゼロレジスタとして扱われるため、この命令の実行結果は以下のようになる。

GR[r10] ← 0 + sign-extend(0x1000) = 0x1000

したがって、r10 には 0x1000 が入っているものとして、この後の処理を考える。

LDM.MP の主な処理は以下のループで表される。

while (cur ≤ end) {
    adr ← tmp
    CheckException(MDP)
    MPLA[cur] ← Load-memory (adr, Word)
    tmp ← tmp + 4

    adr ← tmp
    CheckException(MDP)
    MPUA[cur] ← Load-memory (adr, Word)
    tmp ← tmp + 4

    adr ← tmp
    CheckException(MDP)
    MPAT[cur] ← Load-memory (adr, Word)
    tmp ← tmp + 4

    cur ← cur + 1
}

ここでは、まず adr に tmp の値を代入し、CheckException(MDP) により、そのアドレスへのアクセスで例外が発生しないかを確認する。その後、Load-memory (adr, Word) によってメモリから Word サイズのデータを読み込み、MPLA[cur] に書き込む。最初のループでは cur = 1、adr = 0x1000 となる。Word は 32ビット、すなわち 4バイトのデータであるため、MPLA[1] には memory[0x1000] から読み込んだ 4バイトの値が書き込まれる。次に、tmp ← tmp + 4 により、tmp の値が Word サイズ分だけ進められる。その後、同様の処理が MPUA[cur]、MPAT[cur] に対しても行われる。最後に cur に 1 が加えられ、1回分のループ処理が完了する。この処理は cur ≤ end を満たす間、すなわち cur = 1 から cur = 3 までの 3回行われる。その結果、MPLA、MPUA、MPAT の各レジスタのエントリ 1 から 3 に対して、r10 が指すメモリ領域の情報が順にロードされる。

以上より、与えられた 8バイト列

20 56 00 10 EA 0F 66 19

は、次の 2命令である。

MOVEA  0x1000, r0, r10
LDM.MP [r10], 1-3

前者は r10 に 0x1000 を設定する命令であり、後者は r10 が指すメモリ領域から MPU エントリ 1 から 3 までの設定値をロードする命令である。LDM.MP は MPU 設定をロードするための特権命令であり、ハイパーバイザが仮想マシンや保護領域の切替時に、メモリ保護設定を高速に復元するために用いられる命令であると考えられる。

処理結果は以下のようになる。

MPLA[1] ← memory[0x1000]
MPUA[1] ← memory[0x1004]
MPAT[1] ← memory[0x1008]

MPLA[2] ← memory[0x100C]
MPUA[2] ← memory[0x1010]
MPAT[2] ← memory[0x1014]

MPLA[3] ← memory[0x1018]
MPUA[3] ← memory[0x101C]
MPAT[3] ← memory[0x1020]

(3)


(2)で特定した特権命令はなぜ存在するのか、その意義を説明してください。回答にあたっては、Armv8-Aが備えるメモリ分離機構と、本マイコンの方式との違いを対比させて論じてください。

ここでは(2)で用いた資料に加え、以下の資料も参考にした。

・Armv8-A virtualization

LDM.MP の機能は、RH850G4MH Virtualization User’s Manual: Hardware Section 5.1.9 “Memory protection setting High speed save and restore function” において “LDM.MP: Load Multiple MPU entries from memory” と説明されている。また、RH850G4MH User’s Manual: Software Section 2.2.3.48 “LDM.MP” では、Operation として MPLA[cur]、MPUA[cur]、MPAT[cur] に対してLoad-memory を行い、cur を eh から et まで増加させる処理が示されている。 したがって、LDM.MP は指定範囲の MPU エントリをメモリからまとめて復元する命令である。

LDM.MP のような特権命令が必要になる理由は、RH850におけるメモリ分離の実現方式が、Armv8-Aの仮想化で用いられるStage 2 translationとは異なるためである。

Armv8-Aにおける仮想化では、アドレス変換がStage 1とStage 2の二段階で行われる。Stage 1では、EL1上のゲスト OSがVM内の仮想アドレスをIPA、すなわちゲスト OSから見た物理アドレスへ変換する。ゲスト OSはこのIPAを自分に与えられた物理アドレス空間であるかのように扱う。そしてStage 2では、EL2上のハイパーバイザがIPAを実際の物理アドレスであるPAへ変換する。これにより、ハイパーバイザは各VMがアクセスできるメモリ領域を制御し、他のVMやハイパーバイザ自身の領域をVMから見えないようにできる。

一方で、RH850はArmv8-AのようにStage 2 translationによってゲスト物理アドレスをさらに変換して分離する方式を中心とせず、MPUの保護設定によってアクセス可能範囲を制限することでメモリ領域へのアクセスを制御している。これは、RH850が主に車載制御などのリアルタイム性が重視されるマイコンであり、複雑な二段階アドレス変換よりも、低オーバーヘッドで予測しやすいメモリ保護が求められるためである。

実際に、LDM.MP の Operation では if (PSW.UM == 0) という条件分岐が示されており、Operation が if (PSW.UM == 0) から始まるため、この命令はユーザモードではなく、スーパバイザ側の権限で実行されることを前提としていることがわかる。これは、MPU設定が各VMや実行環境のメモリ保護境界を決定する重要な情報であり、ゲストプログラムが自由に変更できてはならないためである。

LDM.MP は、指定範囲の MPU エントリについて、MPLA、MPUA、MPAT をメモリからまとめて復元する。MPLA と MPUA は保護対象となるメモリ領域の範囲を示し、MPAT はその領域に対する読み取り、書き込み、実行などの属性を示す。したがって、LDM.MP は、VMや実行環境の切替時に、アクセス可能なメモリ範囲とそのアクセス権限を高速に復元するための特権命令であるといえる。

問3


IoT機器のリバースエンジニアリングにおいて、電圧フォールトインジェクション(VFI)等の物理的な干渉を用いて意図的に誤動作を誘発させ、実装された保護プロセスをバイパスする解析手法があります。

(1)


このような物理現象を利用した保護の無効化を行う場合、日本のどのような法律に抵触するリスクがあると考えられますか。具体的な法律名を挙げたうえで、なぜそれらがリスクになり得るのか、解析手法の技術的な性質と照らし合わせてあなたの見解を論じてください。

不正アクセス禁止法 不正アクセス禁止法では、「アクセス制御機能を有する特定電子計算機」に対して、電気通信回線を通じて、当該アクセス制御機能による特定利用の制限を免れることができる情報又は指令を入力し、制限されている特定利用を可能にする行為が不正アクセス行為として定義されている。VFI等は物理的な干渉であるため、それを行っただけで直ちに不正アクセス禁止法に該当するとは限らない。しかし、VFIによってIoT機器の認証処理等の保護プロセスをバイパスし、その後、電気通信回線を通じて本来許可されていない管理機能や内部機能を利用した場合には、アクセス制御を回避して特定利用を行ったものとして、不正アクセス禁止法に抵触するリスクがあると考えられる。

著作権法 IoT機器に搭載されているファームウェアは、多くの場合、プログラムの著作物に当たり得る。VFI等によって保護プロセスをバイパスして内部のファームウェアを読み出し、これを無断で取得したうえで、複製・改変・配布した場合には、著作権法上の複製権、翻案権、公衆送信権等の侵害が問題になり得る。通常、機器から取得されるものはソースコードではなく機械語形式のファームウェアであるが、ソースコードでなくてもプログラムとして著作物性が認められる可能性がある。また、これを逆アセンブル、逆コンパイルした場合でも、解析の目的や利用範囲、公開の有無によっては、複製や改変に関する問題が生じ得ると考えられる。

個人情報保護法 解析対象が、周囲の音声、映像、位置情報、利用履歴、認証情報などを収集するIoT機器であった場合、保護プロセスをバイパスすることで、本来アクセスできない利用者データにアクセスできてしまう可能性がある。このデータが、特定の個人を識別できる情報、または他の情報と照合することで個人を識別できる情報である場合には、個人情報保護法上の個人情報に当たり得る。そのため、解析の過程で利用者データを取得したり、第三者に提供・公開したりすれば、個人情報保護法上の問題になり得ると考えられる。

刑法 VFI等の物理的な干渉を行った対象のIoT機器が、自分の所有物ではなく、他人、企業、学校、公共機関などの機器であった場合には、刑法上の器物損壊罪、電子計算機損壊等業務妨害罪、業務妨害罪が問題になり得る。まず、VFIによって機器を破損させたり、正常に使用できない状態にしたりした場合には、器物損壊罪に問われるリスクがある。物理的に完全に破壊した場合だけでなく、一時的に通常使用が行えなくなった程度であったとしても、機器としての機能を害し、検査・復旧・再設定が必要になるような状態にした場合には、器物損壊と評価される可能性がある。また、対象が業務に使用されるIoT機器や制御装置である場合、VFIによって本来の目的に沿う動作をさせなかったり、目的に反する動作をさせたりして業務を妨害すれば、電子計算機損壊等業務妨害罪が問題になり得る。器物損壊罪と同様に、たとえ誤作動が一時的なものであっても、その結果として業務が停止したり、復旧作業が必要になったりすれば、業務妨害として判断されるリスクがある。VFI等による解析が、企業や学校、公共機関などの通常業務を妨げる形で行われた場合には、業務妨害罪も問題になり得る。例えば、解析対象の機器を誤動作させた結果、サービスの停止、監視機能の停止、設備の復旧作業、利用者対応などが発生した場合、単なる技術的実験ではなく、他人の業務を妨害する行為と判断される可能性がある。

(2)


あなたが解析の過程で致命的な脆弱性を発見した際、自身が法的な責任を問われるリスクを最小化しつつ、技術者としての社会的責任を果たすために、どのような手順や姿勢で対処すべきだと考えますか。

致命的な脆弱性を発見した場合、私自身が法的な責任を問われるリスクとして考えられるのは、脆弱性の検証や外部への公開の過程で、上に記したような著作権法、不正アクセス禁止法、刑法上の電子計算機損壊等業務妨害罪や業務妨害罪、個人情報保護法などに抵触する可能性である。特に、脆弱性の内容や再現手順を不用意に公開した結果、第三者による攻撃を容易にした場合や、検証の過程で他人の機器、ネットワーク、サービス、個人情報などに影響を与えた場合には、法的責任を問われるリスクが高まると考えられる。

そのため、脆弱性の検証の際には、可能であればローカル環境を用意し、対象機器が完全に自分の管理下にあり、かつ外部ネットワークから隔絶されている状態で行うことが望ましい。もしそれが難しい場合でも、必要以上の検証は避け、可能な限り第三者への影響が生じないようにする必要がある。また、脆弱性として判断できる最低限の情報取得にとどめ、ファームウェア、認証情報、暗号鍵、個人情報、通信ログなどを不必要に取得・保存・複製しない姿勢が重要である。

検証が済めば、その内容をできるだけ正確に記録し、IoT機器を販売しているメーカーが脆弱性を確認し、再現できるように資料をまとめる必要があると考える。記録すべき内容としては、対象機器の製品名、型番、ファームウェアのバージョン、検証環境、発見日時、脆弱性の概要、影響範囲、再現条件、想定される被害、確認した範囲などが挙げられる。ただし、この資料はメーカーや調整機関に提供するためのものであり、一般に公開する段階では、攻撃に直結する詳細な手順やコード、取得したデータなどを含めるべきではない。

そのうえで、これらの情報をメーカーに直接連絡して提供するか、または独立行政法人情報処理推進機構(IPA)の脆弱性関連情報の届出受付に報告することが必要であると考える。特に、メーカーに直接連絡しても返答がない場合や、複数の製品・企業に影響する可能性がある場合には、IPAやJPCERT/CCのような調整機関を通じて報告することで、より適切な対応につながると考えられる。

発見した脆弱性が特定の製品だけでなく、共通の部品、通信方式、認証方式、ライブラリ、チップ、ファームウェア構成などに起因するものである場合には、同様の脆弱性が他社製品にも存在する可能性がある。そのため、IPAの脆弱性関連情報の届出受付を通じて報告を行うことで、当該メーカーだけでなく、関係する他の製品開発者への注意喚起や対策の促進につながる可能性がある。これは、個人が直接複数の企業へ連絡するよりも、調整機関を介した方が、情報の扱いや公開時期を適切に管理しやすいためである。

そして、このような脆弱性に対応する姿勢として重要なのは、脆弱性を見つけたことを誇示することではなく、被害を防ぐために責任ある行動を取ることである。企業などが十分な対策を行っていない段階で脆弱性の詳細を外部に公開すると、その情報をもとに攻撃が行われる可能性があり、社会的責任を果たしているとは到底いえない。したがって、外部への情報公開は必要最小限にとどめ、公開の時期についても、メーカーや調整機関と相談し、修正パッチや回避策が用意された後にするべきである。

私の見解としては、技術者としての社会的責任とは、発見した脆弱性を利用して注目を集めることではなく、その脆弱性によって生じ得る被害を最小限に抑え、適切な対策につなげることである。脆弱性情報の公開は、攻撃を助長するためではなく、同様の脆弱性を今後生み出さないための教訓や注意喚起となることが望ましい。そのためには、検証範囲を限定し、取得情報を最小化し、メーカーやIPAなどの適切な窓口を通じて報告し、対策が行われるまで詳細情報の公開を控えるという姿勢が重要であると考える。

問4


あなたがこれまでに取り組んだ分解、解析、モノづくりの実体験について記述してください。対象物は、家電、ガジェット、玩具、自作基板、ソフトウェアなど何でも構いません。

その経験を踏まえて、本ゼミで何を学びたいか説明してください。

私がこれまでに取り組んだ分解・解析の経験として、故障したソニーのウォークマンを分解したことがある。もともとは音楽を聴くために使用していた機器であったが、故障して動作しなくなったことをきっかけに、内部がどのような構造になっているのかを自分の手で確認してみたいと考え、分解を行った。私は昔から手先の器用さには自信があり、細かい部品を扱ったり、身近な機器の仕組みを観察したりすることが好きであった。そのため、故障したウォークマンを単に使えなくなったものとして処分するのではなく、内部構造を知るための対象として捉えた。

実際に分解してみると、小さな筐体の中に基板、バッテリー、液晶、ボタン、音声出力に関わる部品などが非常に密度高く配置されていることが分かった。特に、限られた空間の中に複数の部品を収めるために、部品の配置や配線、固定方法などに多くの工夫がなされている点が印象に残っている。また、分解の過程では、どの順番で部品を外すべきか、どの部分に力を加えると破損する可能性があるのかを考えながら作業する必要があり、単に中身を見るだけではなく、構造を観察しながら慎重に解析する姿勢が重要であると感じた。この経験を通して、普段何気なく使用している製品の内部には、外見からは分からない設計上の工夫が数多く存在していることを実感した。

現在私は大学2年生であるが、情報科学という分野に本格的に触れ始めたのは大学に入学してからである。入学後、筑波大学情報科学類にAC入試で入学してきた人たちと縁あって仲良くさせてもらっている。その中には、プログラミング言語に詳しい人、OSやアセンブリ言語に精通している人、ハードウェアを扱っている人など、さまざまな分野に深い知識を持つ人がいる。そうした人たちと会話する中で、自分の知識の少なさをひしひしと感じる場面が多くあった。一方で、そのような環境に身を置いたことで、自分もより深く技術を理解し、表面的な会話だけでなく、仕組みや設計思想に踏み込んだ内容で議論できるようになりたいと考えるようになった。

特に、ソフトウェアだけでなくハードウェアの知識も持っている人たちの話を聞く中で、コンピュータや電子機器を理解するためには、プログラムの動作だけでなく、それを支える物理的な構造や低レイヤの仕組みにも目を向ける必要があると感じた。ウォークマンを分解した経験は、完成品の内部構造を知る面白さを感じるきっかけとなったが、現在はそこからさらに進んで、ハードウェアとソフトウェアがどのように連携し、一つのシステムとして動作しているのかを理解したいと考えている。

そのため、本ゼミでは、ハードウェアとソフトウェアの両方について、少しでも多くの知識を吸収したい。単に講義として知識を得るだけでなく、実際に手を動かして分解、解析、実装を行うことで、仕組みを自分の中で納得できる形で理解したいと考えている。また、分解や解析の過程で得られる観察力、原因を推測する力、問題を切り分ける力は、セキュリティやシステムの理解においても重要であると考える。表面上の動作だけを見るのではなく、その裏側で何が起きているのかを考えられるようになることが、技術者として成長するうえで必要であると感じている。

さらに、このゼミで得た経験を、今後のモノづくりにも生かしたいと考えている。具体的には、ゼミ終了後に分割キーボードの自作に挑戦したい。分割キーボードを作るためには、基板、配線、はんだ付け、スイッチやキー配列の設計、さらにはファームウェアなど、ハードウェアとソフトウェアの両方に関する知識が必要になると考えられる。そのため、本ゼミでの分解や解析を通して得た視点を、単に既存の製品を理解するためだけでなく、自分自身で新しいものを作るための力につなげたい。

以上の経験を踏まえて、私は本ゼミを通して、製品やシステムの内部構造を観察し、仕組みを理解し、問題を分析する力を身につけたいと考えている。現時点では、周囲の知識ある人たちと比べて自分に不足している部分が多いことを自覚しているが、その分、知らないことを吸収しようとする意欲は強く持っている。本ゼミで得た知識や経験を通して、ハードウェアとソフトウェアの両方の視点から物事を理解できるようになり、周囲の人たちともより深く踏み込んだ内容で会話し、互いに刺激を与えながら成長できるようになりたい。