シーサーブログに移行しました
#本当にひどい実験 実施報告書2019
※この記事は苫小牧高専アドベントカレンダー2019 6日目の記事です。
#本当にひどい実験 とは
#本当にひどい実験 とは、Twitterのハッシュタグである。苫小牧高専 創造工学科 情報科学・工学系3年の情報科学・工学実験Ⅱにおいて、後期6週分の日程で行われた「セキュリティ」というテーマの実験のハッシュタグとして使用された。
昨年度の実験のころに使われたハッシュタグで、「今年も使ってね!」と言わんばかりに前のホワイトボードにハッシュタグを書いていたのだが、昨年ほどこのハッシュタグは盛り上がらなかった。(やはり昨年が盛り上がりすぎただけなのでは?)
昨年度の実験の様子については、この実験で用いた教材を作成したmkさんが昨年のアドベントカレンダーの記事として書いてくれている。
実験の目的と内容
今回の実験の目的は、情報セキュリティに関する基礎知識を習得することである。そんな感じのことを(今年も)実験指導書に書いた。
実験では、僕の専攻科特別研究のテーマ「情報セキュリティに関する教材の研究開発」のもと開発している、「情報セキュリティに関する教材」を使用した。この教材は、IoTカー、Digispark USB開発キットの上でBadUSBとして動作するサンプルプログラムやライブラリ、実験指導書、スライドや補助用の資料から構成される。
研究で開発している教材はDigispark USB開発キットを用いたBadUSB開発演習教材と、IoTカーを用いたIoTセキュリティ教材の大きく2つに分けられる。
BadUSBをざっくりと説明すると、外見はUSBメモリ等一般的なデバイスだが、ファームウェアを書き換えることでキーボードやマウス等に擬態して、PCに危害を加える操作をインターネットを介さずに行うことが可能なデバイスである。
今回は安価でUSBに直刺しして使うことができ、Arduino IDE上で開発ができるDigisparkと呼ばれるマイコンを使用し、キーボードの操作を自動的に行えるライブラリを日本語キーボード向けに改修して、疑似的なBadUSBとして開発演習を行った。
IoTカーとは、Raspberry Piを搭載したラジコンカー的なモノである。このIoTカーには、操作用のWebアプリケーションが搭載されている。前進・後退、右左折といったラジコンカーとしての基本機能から、IoTカー搭載のWebカメラを利用した写真撮影機能、撮影した画像の管理機能(ユーザ名・パスワードによる認証付き)といった機能を持つ。
ちなみに僕が開発したのはIoTカーに搭載されているソフトウェアや指導書等の教材であって、ハードウェアは昨年の研究で使われていたものをそのまま引き継いでいる。
このIoTカーには、プログラムの不具合や設計ミス、設定の不備などが原因となって発生したセキュリティ上の欠陥、つまり脆弱性が埋め込まれている。これらの脆弱性を発見・修正することによって、攻撃者の立場からIoTセキュリティについて学ぶことができるというのが、この教材のアピールポイントだ。今回の実験は、昨年度と大まかな内容は変えず、Webインターフェースをmod_pythonを用いていた部分を改修し、全てCGIを用いた新型(?)の運用も兼ねていた。実験の担当教員はshigyo先生で、僕はTAとして実験のお手伝いをしつつ、教材の評価を行っていた。
実施結果
今年度の実験は、10月3日(木)から12月5日(木)まで、間に休みを入れつつも毎週木曜日午後に以下のような日程で行われた。1週目のBadUSBの開発演習は個人実験で、それ以降のIoTカーを用いた実験は2人1組で行った。
1週 BadUSB開発演習
1週目は僕が改修したキーボードライブラリや自分で作成したBadUSBのような動きをするサンプルプログラムが用いられるBadUSB開発演習を行った。
2週 Raspberry Piのセットアップと動作確認、PythonによるIoTカーの制御
昨年度1週目~2週目で行っていた、配布したmicroSDカードへのOSイメージの書込みが本題の情報セキュリティと関係ないのにも関わらず、実験室で行うにはダウンロードに時間がかかりすぎてただ時間を食うだけになっていたので、OSイメージを予め焼いたmicroSDカードを渡すことにして他の内容を1週分にまとめた。作業内容としては以下の通りだ。
OSイメージの書き込みをやめたことで班ごとの作業時間のムラは少なくなったが、PythonによるIoTカーの制御はどうしても班によって達成度の差が出てしまった。
3週 PythonによるWebプログラミング
実験内容を細かく分けると以下の通りだ。
- Apacheのインストール
- サンプル用HTMLの作成と確認
- 2週目で書いたIoTカーの制御プログラムをWeb上で動作させる作業
PythonのCGIがプログラムの改行コードがLFでないとプログラムが上手く動作しないこと、プログラムに実行権限がないと動作しないということを初版の実験書に明示しなかったことからほとんどの班がこの週の実験を予定通りに終わらせることができなかった。
実行権限を与えるコマンドについては実験書にも書いていたが、それをプログラム毎に適用すべきなのを明示するべきだった。学生の事前知識をきちんと理解していなかった教材を作る側である僕らに責任があるので、学生には申し訳ないことをした。
この場を借りてお詫びいたします。
4週目 操作用アプリケーションの設置と設定、動作確認
3週目の内容が元々多かったこともあり、4週目の内容は比較的少なめにした。そのことから3週目で詰まっていた学生たちもこの週の内容はあまり詰まらずに進められたようだ。
5~6週目 脆弱性の発見と修正
最後の2週間では、脆弱性の発見と修正を行った。最後の2週間にして、やっとセキュリティっぽい話が始まった。
まず最初に、セキュリティに関する簡単な講義を行った。講義はshigyo先生がしてくれた。スライドには、これまで扱った要素技術とIoTカーそのものについての説明に加えて、これまでに起きたセキュリティに関する有名な事件とその原因、対処方法についての説明、課題のヒントの説明を行った。
課題は、IoTカーに埋め込まれた脆弱性を発見し、原因の調査と修正方法の提案を行うというものだった。前述したスライドを配布し、課題の文章にもキーワードを散りばめておいたので、だいたいの班が自力で発見をしてくれていた。そうでない学生も段階を追ってヒントを与えていくと答えを見つけてくれているようだった。
所感
BadUSBの演習は上々
1週で完結する実験だったため、最後にBadUSBの動作を見て楽しんだりしてくれたようで、学生の教材に対する反応は良かった。
そして何より、自分が改修したライブラリが上手く動作していたのがうれしかった。
IoTカーの実験も楽しく行えるよう、次週に内容を持ち越さないように来年度以降は上手く週毎の作業の配分を行いたい。
学生にとってはじめてのことが多すぎたIoTカー
今回対象となった3年生が持っている授業や実験で得た知識は、せいぜいUNIXコマンドの基礎とC言語の基礎くらいだ。一方、今回の実験で扱ったような要素技術を列挙してみると、こんな感じだ。
- Linuxサーバの構築
- ApacheによるWebサーバの構築
- HTMLによる簡単なWebページの作成
- Pythonによるプログラミング
- PythonによるGPIOやWebカメラの制御
- リレーショナルデータベースとSQL
- Webアプリケーションにありがちな脆弱性
正直、これだけの要素技術を初めて扱うものとして6週間の実験に詰め込むのは無理がある。mkさんも昨年度ブログでそう書いていたが、今年度の実験の様子を見て僕は無理があると確信した。課題やレポートでは、これらについて理解していなくても、「さらっとでも触れて、こういうものがあるんだと知ってくれれば良いよ〜」くらいの難易度にしたつもりではある(実際、課題のコード自体サンプルコードや調べた内容のコピペで済むところが多い)が、それでもこんなに新しい事が次々と出てこられては、戸惑う学生も多かっただろう。
今年度TAをやった立場としてはmkさんのブログの3~4週目の項で書かれていた
ドキュメントルートに配置するファイルのパーミッションとか、UNIXの扱い方的なところでハテナマークを浮かべる学生がいたのもまた事実だ。
の”ハテナマークを浮かべる学生がいた”レベルで去年の学生達が収まっていたのが信じられない。やっぱすげえよ1期生達は…
だからといって今年度の学生が「自分達全然できないな…」と気分を落とす必要はない。(実際実験中に落ち込んでいた学生には自分なりに励ましの言葉をかけた)
やっぱりこの実験は3年後期でやるにはこのままだと荷が重すぎる気がする。
この実験は授業や実験でコードを書く経験を積み、RDBやHTML等の要素技術についてもサラッと習った4年生や5年生になってからやったほうがいろいろ楽しめて良いかなとも思う。とはいえ、学科再編後は4年生からコースが分かれてしまうようになったので、タイミングとしては3年後期のこのタイミングしか無かったのではないかとmkさんと同じく予想している。(もちろん、カリキュラムを決める権限は僕にはないので憶測でしかない。)
とりあえず体験してもらえたことが何より
セキュリティに関する実験とはいえ、セキュリティ以前にまず普通にモノを作ったり、環境を作ったりした事が無い人たちがほとんどであると考え、この実験の前半はそういう経験を積んでもらうことに重点を置いている。
これまでの授業だと、教員や技術職員さんが用意してくれた環境の上で課題のプログラムだけ書くという体験しかしてこなかったはずなので、ゼロから体験してもらおうという意図だ。たぶんわかってる人は勝手に進んでいったし、わからない人は、実験書に書いてあるコマンドをよくわからないまま書き写して、それっぽい結果が返ってきたら次へ進むという感じだったと思う。
今回扱った要素技術については、これから進級して授業や実験で扱ったり、資格試験の勉強で体系的に学ぶことが出来ると思う。また、今回の実験をきっかけにRPi買うなりVPS借りるなりして趣味や自学として触れることもあるだろう。その時に、今回手を動かしてそれぞれの技術に触れたという経験が生きてくると良いなと思っている。
肝心のセキュリティに関しては、「こうするとこうなる」とか、「こういう脆弱性がある」くらいは体験してもらえたと思うので、今回ですべてを理解していなかったとしても、今後なにか自分で作る時に思い出すきっかけになれば良いんじゃないかなと思っている。
今後
これで第2回目の運用は終了した。僕はこの結果を卒業論文にまとめるつもりだ。また、皆さんから頂く(予定の)フィードバックを元に、来年度以降僕の研究を引き継いでくれる学生が教材の改善を行ってくれるだろう。
#本当にひどい実験 ベストツイート2019
昨年と同じ内容は昨年のブログをパクっ参考にしたとはいえ、長い文章をダラダラと書くのは疲れたので、 #本当にひどい実験 というハッシュタグ付きのツイートの中で、一番面白いと思ったツイートを紹介して、この記事を終わりたいと思う。
UTF=8 (ここでUTFに8を代入する)#本当にひどい実験 pic.twitter.com/sGsTlAC8d7
— みみねこ (@3_3_nk) 2019年10月31日
おわりに
以上で、#本当にひどい実験 実施報告書は終了とする。
担当教員のshigyo先生、昨年度のTAの経験を元に資料を残してくれたり、アドバイスをしてくださったmkさん。そして何よりも、実験を受けつつフィードバックをくれた情報系3年の皆さん、本当にありがとうございました。
明日は堤君の担当です。
専攻科1年を振り返って
※この記事は苫小牧高専アドベントカレンダー2018 13日目の記事です。記事を書くのが遅れ、14日に投稿して申し訳ありません。
専攻科電子・生産システム工学専攻1年のてっぴーと申します。
高専とかいう辺境の地で何をとち狂ったか更に2年追加で高専にいようと思った異端児の集まりである専攻科について、今までの生活を振り返ってみようと思います。
その前に何故そんな異端児の集まりである専攻科に入ったかというのを話すと、本科時代の自分だとエンジニアとしての技量が足りないかなと考え進学を決意し、自分の学力(受験勉強に対するモチベ含め)を考えるとベストな選択肢は専攻科かなと思ったので専攻科にしました。
ではまず専攻科生活の振り返りをします。
入学式
専攻科の入学式は本科の学生に混ざってやるので、15歳の子と20歳の成人が同じ学校に入学するという今考えると中々面白い光景だったのではないかなと思います。
本科生は同級生のことなんてまだ知らないので待機時間話さず静かにしてるんですけど、専攻科生は5年の本科生活を共に過ごしてきた仲間の集いなので、待機時間は専攻科生たちの話し声が響き渡っていたのを覚えています。(僕はちゃんと静かにしてたつもりです)
授業に追われた前期
専攻科は研究やその他自主的な活動がメインだから授業はそんなに多くないという話だったのですが、前期はたくさん授業があったし、一部の科目は課題が沢山出て大変で、インターンを決めたりとその他の活動も忙しかったので研究は正直進まなかったです。
でも中にはなんとか時間作って研究してた同級生もいてすごいなあと思いました。
そういえば間に体育大会があった気がしますが、そういうイベントは専攻科生は自分から参加しようとしないと縁がないので僕は参加しませんでした。
夏休みのインターン
僕はシーサー株式会社というところで1ヵ月間インターンに行ってきました。
ここについては別記事にできるくらい書けることがあるのでブログを書けばよかったものの、当時ブログを書くモチベが消失していたので書けませんでした。シーサーの皆さんごめんなさい。
今はブログ書くモチベが復活しつつあるので、年内にインターン振り返り記事を書きたいなと思ってます。
なので具体的な内容はここでは触れないです。後日僕のブログを見てください。
本当にひどい後期
本当にひどいです。授業は専攻科が幅広い分野をカバーする授業をやっていることもあり、自分の専門分野に直結する授業は皆無で”専攻科生活”は正直虚無です。
なんか書けることないかな…あ
えむけーさんがやっている研究をこれから引き継いでやっていくということで、#本当にひどい実験の見学をしました。
これについてはえむけーさんのブログに詳しく書いてあるので、それを見てください。
そんなわけで、専攻科の授業で学べる内容は正直自分にとっては微妙で(技術者倫理はためになったし、専攻科の授業はグループワークが多くてその点に関してはいい経験を得られたと思いました)、やはりメインは研究等の課外活動なのかなと思いました。
ただ、僕は研究をあまりできてないので、次はその他の課外活動について振り返りたいと思います。
インターン決めのため逆求人へ
6月頃にWeb系の企業にインターン行きたいなーと思い、それなら自分でインターン先探すかーと思い逆求人に応募しました。
当時実務経験がなかった僕でも、インターンに対する意欲を見せることができたのか面談枠が埋まってくれたので本当によかったです。
結局インターンは逆求人とは別の方法で決めました。
ただここでいろんな企業を知ることが出来たので、今後の就職活動に役立てようと思います。
ここもブログ記事にすればよかったもののしていない…ほんとに夏はアウトプットのモチベが死んでいた…
就職活動
逆求人で知り合った企業からメールが来てES出して♡って言われたので出したらなんか就職活動が始まってました(当たり前)。
まあ結局そこの会社には落ちたんですけどね~ 悲しいなぁ・・・
実はそこから更にpaiza経由で†プラチナスカウト†が来た*1会社の面接を受けたけど、そこにも落ちてこの時期から既に2社落ちているというすごいスタートを切っています。
paiza経由で応募すると落ちた場合はその理由をフィードバックとして送ってもらえるので、そこで言われたことを反省点として次の会社の選考を頑張りたいと思います。
情処LT
本科の時に所属していた演劇部にはほとんど顔を出さなくなったことと、LTで発表したい欲が出てきたので、本科生時代よりも情報処理同好会でLT発表をしました。
しょうもない発表もあったけど、面白いと言ってもらえた部分もあったのでよかったです。
アプリコンテスト
今年度、助っ人専攻科生枠(?)としてソフトウェアテクノロジー部の人たちと共に北海道アプリコンテスト2019に参加します。
僕の所属するチームは3人チームで、僕はRailsを使ったサーバーサイドの開発を担当します。
Rails自体はやったことないけど、シーサーでサーバーサイドの開発(リファクタリングに近いけど)をしたのでRails勉強すればいけるやろの精神で頑張ります。
既にアプリの内容やUI遷移は考えているので、冬休みから本格的にコードを書き始める予定です。
これからの専攻科生活の予定
直近ではアプリコンテストの開発が本格的に始まるのでまずそれを頑張りたいです。
そして就職活動を頑張ります。
その後はえむけーさんの研究を引き継いでやっていき、教材をよりよいものにしていきたいです。
就職活動を頑張るために、12/15(土)の逆求人に参加してきます。
これについても記事を書くかもしれないので、その時は是非見てください!!
明日(?)の担当は専攻科の先輩である@cs_naguさんです!
*1:割とpaiza経由のスカウトメールが来るのでそこまですごいことではなさそう
演劇部の話をすると言ったな。あれは嘘だ。
※この記事は苫小牧高専アドベントカレンダー2017 5日目の記事です。
記事の内容は「多分演劇です」とは言ったものの、去年あれだけ内情暴露記事書いたからあれを越えられる記事を書ける気がしないので内容を変更してお送りします。
とりあえず手を動かしてみようぜという話
近頃、TwitterのTLで「何か開発的なのしてみたいけどそんなことできる技術もないし勉強するにしても何したらいいかわからない」的なことを言っている人を何人か見かけました。
正直僕も最近までそう思っていましたし、もしかしたらTwitterでも言っていたかもしれません。
ですが最近考えが変わって、自分が考えていたような規模の開発(アプリ開発とか)ではなかったちょっとしたスクリプトやbotを作る経験が意外と勉強になっているなと考えるようになりました。
ここからは考えが変わった大きなきっかけを書いていきます。
ブログ記事やTwitterとか見てると皆いとも簡単にスクリプト組んだりbot作ったりサーバー立てたりしてるように見えますが、それはその人の今までの開発経験によってほとんど躓かずにできているからです。そうでない場合でも初歩的なミスはいちいち書いてると面倒だから書いていないだけで初心者がやると躓いてしまう部分の補足は書いていないことが多いです。
なので言語の文法は理解してるつもりだけどその言語での開発経験が全くない初心者はブログ記事だけ見ても使う関数やメソッドの仕様をよく理解していなかったりして完成まで行くのが意外と難しかったりします(僕はそうでした)。
実際にそういう経験をしたのは、昨日まで作っていたSlackにある地域(僕が作ったプログラムでは札幌)の今日の天気と最高気温と最低気温を通知するプログラムを作成した時です。
なぜ天気通知プログラムを作成するに至ったかというと、元々LINE天気を使って朝の9時に天気予報の通知が来るようにしていたのですが、平日はもっと早い時間に通知が来てほしかったけど平日だけ時間をずらす、みたいな設定はできず、かといって一日に何回も通知が来るようにも設定できなさそうだったのでそれならSlackに通知を送るbotがあると便利だなと思ったからです。言語はライブドアの天気予報で提供してくれるJSONを処理できればなんでもよかったのですが、使ったことのないHerokuを使ういい機会だなと思ってHerokuを使うことを決め、Herokuでよく使われているからと開発で使ったことないRubyを使うことにしました。
僕はRubyを触ったのはpaizaのプログラミング学習が全部無料でRubyの動画教材を見ることができたときに触ったくらいで、スクリプトやbotを作るのに使った経験すらありませんでした。
そういうわけで、ほとんど使ったことのないRuby、Herokuのへの字も知らないHeroku、何も起きないはずがなく…いろいろな壁にぶち当たりました。
プログラム部分を完成させたのが昨日で、そしてHerokuのスケジューラはクレジットカード登録しないと使えないことをすっかり忘れていたのでまだbotとしては完成していません。なのでこれはまた別記事として天気通知botについては記事を書きたいと思います。
↑現状のプログラム動作時に送られてくるメッセージ。表記がメッセージ毎に違うのは微妙に手直しを加えているから
このbotの作成を機に、ちょっとしたbotやスクリプトの作成でも、今まで知らなかったことをいろいろ知ることができるから、とにかく手を動かすことは大事だという思いが強くなりました。
僕はこういうbot欲しいなあと思って作り始めることができましたが、ちょっとしたものでもいいから作ってみようとしてもすぐに思い浮かぶ人ばかりではないと思います(開発経験がない人は特に)。そこでおすすめなのが去年僕が作ったgmailのメール削除自動化スクリプトです。
これはJavaScriptベースのGoogleの機能を活用できる独自言語Google Apps Scriptを使って書いたものなので、これを機にGmail関連のスクリプトを書いてもよし、カレンダーに独自機能追加してもよし、ここからJavaScriptの勉強、その他Webアプリの勉強につなげるのもよしと何も開発経験がない人が踏み台にしていくには最適なスクリプトだと思います。メール勝手に削除してくれるのは普通に便利なので、とりあえずサクッと作ってみるといいですよ。
ここまで内容はやっていきのある人には関係ないものでしたが、今まで一歩を踏み出せなかった人がこれを見て一歩を踏み出してくれると嬉しいです。
今後の僕のやっていき予定(?)
僕もまだちょっとしたスクリプトやbotくらいしか作ったことないので、今後雑なものでいいからアプリ開発をやってみたいです。
あと、友達とのマインクラフトのマルチプレイ用にvps使って鯖立てようという話が出ているので、もしかしたらマイクラ用のサーバー構築とかもやるかもしれません。
factorioのすすめ
唐突ですが最後におすすめのゲームを紹介させて下さい。
このゲームは一言で表すと「作業を自動化する工場ゲーム」です。
語りたいことはいっぱいありますが、公式の動画を見るほうがこのゲームの魅力がすぐに伝わると思うので貼っておきます。俺この動画今まで何回貼っただろうか…
あとITproでこんな記事が書かれていました。
http://itpro.nikkeibp.co.jp/atcl/column/17/080200325/080700002/?rt=nocnt
ノートPCでできるし価格も2300円でセールはしばらく(アーリーアクセスの間?)は来ないので欲しいと思ったら買ってみてください。とりあえずお試しでやりたい人はDemo版もあります。
steamのリンク貼っときますね
http://store.steampowered.com/app/427520/Factorio/
実生活だけでなく、ゲームの中でもよい自動化ライフを!
明日(6日目の)の担当は@akiba_konさんです。よろしくお願いします!!