yukuro’s blog

ぽえむ日記

セキュリティキャンプ2018応募課題

セキュリティキャンプ全国大会2018の選考に通過しました。

フィジカルトラックです。

ROSロボットをハックせよという講義に釣られて応募した。
もちろん、他の講義も超魅力的だけれど。

そもそもセキュリティキャンプ自体を知ったのが今年の4月だったので、よく受かったなーというのが正直なところ。
熱意+成果物(どちらかが欠けてもダメ)みたいに書くといい感じがする。

一番苦労したのはA6のlongjmp、setjmpを用いてプログラムを書く問題。
(いくつかの授業が犠牲に...(単位を落とすレベルではない))

課題A

A1.あなたのプログラミングのスキルを推し量るエピソードがあれば書いてください.

自慢できるようなスキルは持ってないので割愛。arduinoのmap関数を自作した話を書いた

A2.linuxunix)に関するあなたのスキルを推し量るエピソードがあれば書いてください.

自慢できるようなスキルは持ってないので割愛。学校の資料閲覧システムを見やすいように、自分なりに工夫した話を書いた。

A3.電子回路、ハードウエア、HDL等のあなたのスキルを推し量るエピソードがあれば書いてください.

この課題を通じてHDLを初めて触ったぐらいなので割愛。

A4.CPUにおける割り込みの果たす役割は何ですか.

・例外処理、リアルタイム性の確保
私はCPUにおける割り込み、とりわけ、組込み向けのCPUの割り込みの果たす役割は大きく分けて2つあると考えている。
一つ目は例外処理に関することである。どんな環境で動作させるにしても、予想外のことは必ず起こりうる。
その原因は、今まで私が経験した中では人為的なミスだったり、過酷な環境(炎天下の日の日なたに、マイコンを放置など)に機器が耐えられないことだったりした。
しかしながら、私はどんなに予想外であっても、サービスを提供する人に怪我などの損害を与えることは決して許されないことだと考えている。
そのために、人に損害を与えるような状況を避けるために例外処理を行うのが割り込み処理の重要な役割の一つだと考える。
2つ目は動作のリアルタイム性にかかわることである。
CPUは一つのことしか一度に処理できないため、そのままでは同時に複数のことができない。
しかしながら、一つのことしか処理できなければ、どんなに人々に役に立つ製品を作ったところで、「動作が遅いから」と人々に見放されてしまうだろう。
割り込み処理を使えば、その問題を解決したかのように見せることができ、動作させたい機能のリアルタイム性もある程度は保証できると考えられる。

A5.Lチカのサンプルプログラムを示し、実際に発光ダイオードが点滅するまでの経緯を詳しく書いてください.

#codiing: utf-8

#A
import RPi.GPIO as GPIO
import time

#B
LEDpin = 24

#C
GPIO.setmode(GPIO,BCM)
GPIO.setup(LEDpin, GPIO.OUT, initial=GPIO.LOW)

#D
for i in range(10):
    GPIO.output(LED,1)
    time.sleep(0.5)
    GPIO.output(LED,0)
    time.sleep(0.5)

#E
GPIO.cleanup()

このプログラムはPythonを使用し、raspbian及びraspberry pi上での動作を想定したものである。
ここでは便宜的にプログラムをAからEに分ける。
まず、Aで必要なライブラリ(GPIO制御用のRPi.GPIO、点滅する間隔を制御するtime)のインポートをする。
次にBで使うGPIOのピン番号(GPIO24番)を指定する。
また、CではGPIOとして使う番号の指定にGPIOの番号を使用することを決め、Bで設定したGPIO24番を出力モードにした後、初めの状態をLOWにするように明示的に示している。
そして、Dではfor分を使ってGPIO24番の出力を0.5秒ごとにHIGHとLOWを繰り返す。最後にEではGPIOで使っていたピン(GPIO24番)を開放している。

A6.Cの関数longjmp setjmpを用いてプログラムを書いてください.

#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

jmp_buf jb;

int main(void){
	int a,b;
	int val = 0; int inpnum = 0;
	puts("Compare two numbers");
	puts("Enter a number");
	scanf("%d %d", &a, &b);

	if(setjmp(jb) == 0){
	val = cmpnum(a,b);
	printf("bigger number is %d", val);
	}else{
	give_error();
	return -1;
	}
}

int cmpnum(int a,int b){
	int error_flag = 0;
	if(a == b){
	error_flag = 1;
	}
	if(error_flag == 1){
	longjmp(jb,1);
	}
	else{
		if(a > b) return a;
		if(a < b) return b;
	}

}

void give_error(void){
	puts("Enter different numbers!!");
}

2つの入力値を受け取り、その大小を比較するプログラムを作成した。longjmp、setjmpは2つの入力値が等しく、大小を判断することが不可能な時の例外処理に用いている。

A7.高級言語のみでOSを記述することは可能だと思いますか.いずれの場合もその理由も書いてください.・プロセッサごとに固有の部分があるので不可能だと思う
使用するプロセッサごとに固有に対応しなければならない部分が多く、プロセッサによっては高級言語の命令を機械語に翻訳できないことがあるので、OSを記述することは不可能だと思われる。
私は高級言語を使うメリットの一つは、他の環境に移植しても、ある程度の動作の互換性が保たれることであると考えている。
よって、例え、高級言語のみでそのプロセッサに対応するプログラムを書くことが可能だとしても、それはほとんど意味のないことだと考えられる。


課題B

B1.いままで作ったもの(ソフトウエア、電子字辞書、燻製、陶芸、パズル、その他なんでも)で自慢したいものがあれば教えてください.

イきり案件なので割愛。今までの製作物(ロボットハンド、FlashAirタンクとか)について書いた。

B2.自由に使える半導体製造装置が手元にあるとしたら、それで作りたいものを具体的に書いてください.

・組込みOSに対応したセキュリティチップ
私は、これまでセキュリティチップという言葉自体は知っていたが、具体的に何をしているかということについては知らなかった。
その原因の一つに私たちがセキュリティチップに関わる機会が少ないことがあると思う。
セキュリティチップを個人向けに販売しているところも存在するがWindows Vista用など、開発しづらいものばかりである。
そこで、組込みOS(mbed OSなど)に対応した半導体を製造し、それの評価基板やDIP化キットなどを広めれば、セキュリティチップ及びセキュリティ分野全体に興味を持つ人が増えるのではないだろうか。

B3.ロボットに期待するところと危惧するところは何ですか.

・期待するところ…人とロボットが仲のいい存在になること
私がロボットに期待することは人と対等になるぐらいに人とロボットが仲のいい存在になることである。
今現在では人とロボットが触れ合う例としてはソニー(株)が販売するaiboディアゴスティーニ・ジャパン(株)が販売するロビが挙げられる。
しかしながら、それらはペットなどの人を楽しませることを目的として販売されているものである。
私は、人を楽しませるものだけでなく、人とほぼ対等な存在になって(完全に対等であると人々は恐怖を抱き、逆に仲がいい存在になることが難しくなるかもしれない)人と仲がいい存在になれば、私たちの生活もより良いものになるのではないかと考えている。
・危惧するところ…ロボットが人間にとって危険な存在になること
私がロボットに危惧することは先述の期待するところに関連するが、人間にとって危険な存在になってしまうことである。
また、それに伴って、人が「所詮はロボット」などと決めつけ、ある意味でロボットにとっての風評被害を引き起こしてしまうことである。
一度そのような噂が立つと人々に先入観ができてしまい、ロボットはいかに役に立つものでも端から役に立たないと決め付けられ、ロボットの持つ能力を十分に生かせなくなるかもしれない。
そのようなことが起こらない、或いは起こったとしてもそれを永続的なものにさせないためにも私たちが危険なロボットを作り出さないと強く意思を持つことが重要だと考える。

B4.ドローンに期待するところと危惧するところは何ですか

・期待するところ…ドローンがインターネット回線の中継器になること
私がドローンに期待するところは、ドローンにレピータなどを搭載しドローンが中継局として活躍することだ。
盛んにIoTが叫ばれている現代において、特に災害時などにそのインターネットが繋がらなければ、IoT機器が活躍できない。
そこで、ドローンが中継局となり各地に存在するIoT機器を活用することで被害を最小限に抑え、すべて人間が行っている場合に比べ、効率的に救助や災害が起こった後の復興を進めることができると思われる。
・危惧するところ…ドローンが犯罪に利用されること
私がドローンに危惧するところは、ドローンがテロなどの犯罪に使われてしまうことだ。
ドローンは他の空を飛ぶラジコン(ラジコンヘリやラジコン飛行機)に比べ、操作しやすく、誰でも簡単に使えるという特徴がある。
しかしながら、便利な反面、ドローンに爆弾などの危険物を括り付けて飛ばしてしまえば、すぐにテロなどの犯罪道具になりうる。
また、そうなった場合、日常においてドローンを見ると「これから何か犯罪を犯すのではないか」と疑念を抱き、恐怖心を覚える人も現れるかもしれない。

B5.自律走行車両に期待するところと危惧するところは何ですか

・期待するところ…運転に余裕が生まれる
私が自律走行車両に期待するところは、運転手も含め車両に乗っている人が運転するということに注意を向ける必要がなくなることだ。
例えば、私が家族と共に旅行に行ったとき、父が車の運転手だったが、車の進行方向とは逆の場所に観光名所などが現れると父がよく見ることができないことがあった。
なぜなら、父は車を運転しており、わき見運転をすると事故にあう可能性が非常に高かったためである。
このような問題は自律走行車両なら解決可能であると思われる。
自律走行車両なら、完全に注意を向けないというのも危険ではあるが、車の外の観光名所を見るぐらいの余裕は得ることができるとだろう。
・危惧するところ…災害時の対処
私が自律走行車両に危惧するところは災害など、人の判断が要される出来事があった時に自律走行車両が予想しない動きをしてしまうことだ。
災害というものは突発的に起こり、予想できない。自律走行車両は主に通常の運転時を想定して作られる。
そのため、人間ならすぐに道路の脇に車を止めることができるが、自律走行車両はそれができず、意図しない方向に動き、それが原因で更に事故を引き起こしてしまう可能性がある。

B6.IoTに期待するところと危惧するところは何ですか.

・期待するところ…情報のつながりが多く出来る
私がIoTに期待するところは、情報のつながりがより多く出来るようになることである。
IoTはインターネットという概念を既製品に取り入れるだけで、多大な恩恵を得ることができると私は考えている。
また、IoTはインターネットを利用するので、その製品から得られたデータを他のことに利用し、情報のつながりが多くなる。
例えば、信号機にIoTを取り入れることで、既存の信号機としての機能に加えて、その時の信号機の状態(赤か青か黄か)をインターネット上に置くことができる。
そのデータを活用すればスマートフォンから信号機の状態を見たり、渋滞の原因を探ることができたりするかもしれない。また、信号機の状態が分かれば、自律走行車両の運用にも役立てることができるだろう。
・危惧するところ…サイバー攻撃の危険に晒される
私がIoTに危惧するところは、インターネットに繋がることで、サイバー攻撃の危険に晒されてしまうことだ。
IoTは確かに便利であるが、サイバー攻撃などで意図しない動作を生み出し、場合によっては人々を危険に晒してしまったり、個人情報を漏洩する可能性がある。
Watch Dogs 及び Watch Dogs2(どちらもUbisoft Montreal)というゲームがあるが、そのゲーム内の主人公は身の回りのIoT機器を意のままにハッキングする技術を持っている。
作中では、その技術を便利なものとしてゲームを進めていくが、そのハッキングを受けた機器を使っている人の気持ちになってみれば、許せない気持ちになることだろう。
このようにIoT機器は危険な存在にもなりうると考えられる。

B7.ロボットをよりセキュアーにするためのあなたなりのアイデアを聞かせてください.

・安全装置スイッチを設ける
安全装置をソフトウェア上で実装するとソフトウェア自体の問題があったり、サイバー攻撃を受けたときに機能しなくなるといった可能性がある。
これらの問題を解決するために有接点リレーを用いた安全装置スイッチをロボットに実装すべきである。
安全装置は、安全装置スイッチ、有接点リレーのみを用い、ロボットの動作にかかわる部分とは完全に分離する。
ロボットを使う人が自らに危険が及んだ場合に安全装置スイッチを押せば、直ちに動作が止まるような仕組みにする。

B8.ドローンをよりセキュアーにするためのあなたなりのアイデアを聞かせてください.

・管制システムを作る
ドローンは悪意ある者の使用以外にもモーターなどの不調で墜落し、ドローンの筐体が人に当たってしまうなどの問題がある。
そこで、航空機が離発着する空港には管制塔があるように、ドローンも人が多くいるところには管制塔のような管制システムを作るべきである。
管制システムは各ドローンのGPS情報を把握し、GPS情報が予定されたものと違う、或いはGPS信号が届かなくなった場合に、そのドローンが飛行している付近の人々に危険を知らせる警戒情報を出す。
また、サイバー攻撃を受けてしまった際に、何機もある(あるいは何機あるかわからないかもしれない)ドローンを個別に守るよりも、管制システムで一括で制御信号を送り、管制システムを守ったほうがずっと効率的であると考えられる。

B9.自律走行車両をよりセキュアーにするためのあなたなりのアイデアを聞かせてください.

・走行する道路をあらかじめ決めておく
ソフトウェア上でサイバー攻撃などに対する術を実装するのも必要だが、私は自律走行車両が走る道路をあらかじめ決めておいたほうが、簡単にかつ効率的にセキュアーになると考える。
なぜなら、あらかじめ決めておけば、その道路を渡るときに私たちはより多くの注意を向け、その結果として、現在の自動運転車での弱点といわれている歩行者の飛び出しを防ぐことができるからだ。
また、走る道路を決めていない場合に比べ、車が自由な場所に行ってしまうということがなくなるため、車同士の位置をより簡単に取得することができると思われる。

B10.IoT機器をよりセキュアーにするためのあなたなりのアイデアを聞かせてください.

・製造メーカーがIoT機器の行動規則を作る
インターネットに接続している時点でサイバー攻撃のリスクは0になることはなく、また、攻撃を受けてIoT機器の動きが本来とは違うものとなっても、その違いがわかる人はIoT機器のメーカーか、その機器の使用者だけになる。
もしくは、使用者でもわからないことがあるかもしれない。
そこで、IoT機器の製造メーカーが「本来あるべき動作」をあらかじめ規則として決めておき、それから外れた場合には直ぐに電源を落とす、というような仕組みを作るべきだ。
この「本来あるべき動作」にはICへの命令の順序、センサーへかかる電圧や電流なども含まれ、この規則に基づき、IoT機器内のシステム或いはOSが動作を監視する。

B11.半導体バイスをよりセキュアーにするためのあなたなりのアイデアを聞かせてください

・セキュリティチップを複数個搭載する
今日において、半導体バイスの多くにセキュリティチップが搭載されている。
しかしながら、そのセキュリティチップの使っている暗号化の方式に脆弱性が見つかるという事例が発生している。
そこで、セキュリティチップを複数個搭載するべきだ。
セキュリティチップを複数個搭載し、暗号化の処理を分散すれば、「セキュリティチップ①が暗号化したデータ」「セキュリティチップ②が暗号化したデータ」というように区別することができる。
脆弱性に対する根本的な解決にはそのチップのファームウェアアップデートが有効だと思われるが、それまでの時間稼ぎができ、被害を抑えることができる。

B12.あなたの情報セキュリティに対し思うところを自由に書いてください.

・ハードウェア面のセキュリティを軽視する人が多すぎる
今まで、クラッキングなどの攻撃から財産を守る有効な手立てはソフトウェア上でのセキュリティ性を高めることだったと思う。
しかしながらIoTの普及に従って、ソフトウェア上だけでのセキュリティ性を高めるだけではできない、或いはハードウェアのセキュリティ性を高めたほうが簡単に済む事例が増えてきたように思われる。
しかしながら、現代においてハードウェア上のセキュリティ性を高める必要性を感じていない人が多すぎると思う。
私が大学に入学して驚いたのは、周りにソフトウェア上のセキュリティ性を高める必要性はわかっているが、ハードウェアの方はハードウェアの設計者に任せておけばよいと考えている人が意外にも多いことである。
確かに、ソフトウェア上でのセキュリティ性を高めることはPCが1台あれば、どうにかすることはできるし、楽しいのかもしれない。
だが、そのままではシステム全体でセキュリティ性を高めるという本来の目的を達成できない。
私はハードウェア上でのセキュリティ性をより高めるたに基礎となるプロセッサやHDLについての勉強を続けている。

B13.あなたの作りたいものは何ですか。それは世の中をどの様に変えますか.

・人型ロボットで人間とロボットが調和する世界をつくる
私が作りたいものは前述したとおり親しみやすい人型ロボットを作ることである。
感情移入できるロボットが現れれば、人間の社会に溶け込みやすくなり、円滑なコミュニケーションをとることができる。
結果として、子育ての場面において親が仕事などで家におらず寂しいと思う子供はいなくなり、ロボットと人が共に仕事をする場面ではロボットを信頼して仕事を任せることができるようになる。
しかしながら、"親しみやすい"人型ロボットを作るには性格を構成する部分、および、それを賄うソフトウェアの役割が重要である。
また、ソフトウェアやその制御にROSなどのロボット用ミドルウェアの使用するロボットも今後増えてくるだろう。
ロボットにソフトウェアが入っている限り、サイバー攻撃のリスクからは逃れられない。
サイバー攻撃を受け、悪意あるプログラムを実行するロボットが、突然に人を傷つけたり、性格が豹変するようなことがあってはならない。
特にROSなどの共通したソフトウェアを使用する場合はさらなる注意が必要だと思う。
それを防ぐためにはソフトウェア上での対策はもちろん、ハードウェア上での対策も必要不可欠である。
しかしながら、私はその対策を行う術を十分に持っていない。
現在、本屋に並ぶ情報セキュリティに関する書籍の多くはソフトウェア上でのセキュリティ性に関するものばかりであり、ハードウェアに主眼を置いたものは少ない。
私は、ハードウェア上でのセキュリティ性を高めることに興味があるが、それを学ぶための文献が少なく、困っている。
そこで、セキュリティキャンプを利用し自分の知見を高め、ハードウェア上のセキュリティ性を高める努力をしていきたい。


最後に

全体としては9700字ぐらいに収まった。
かかった期間は(最後の方に焦ってやったとは言え)1か月ぐらい。
課題をやるだけでも、色々と調べ、自分の意見にまとめる力がつくので、他の人も是非やってほしい(何よりも他の方の回答が見たい!)