更新日時で差をつけろ

むしろ差をつけられている

seccamp2022チューター参加の記録

セキュリティ・キャンプ 全国大会2022に、チューターとして参加したので、その感想を簡単に記録する *1

受講生としての参加したときの記録は以下のページを参照。

チューターとして担当したのは、受講時と同じXコースのリバースエンジニアリングゼミ。ルーターやIoT機器を分解して、UARTやらI2Cのポートを探してきたりアプリからめぼしい情報を探してきてごにょごにょ解析する。公式ページの説明はこんな感じ。

リバエンゼミではIoT機器を分解、解析してものが動く動作を明らかにするリバースエンジニアリングを中心に行います。実際のIoT機器を分解、解析してどのような仕組みで動くかを明らかにし、可能であれば脆弱性が無いかを検証します。 今後 IoT 製品がどんどん増えていく世の中に向けて、分解しながら物作りのためのアイディアの源泉を得るもよし、徹底的に分解を進めてすべてを明らかにする喜びを全力で満たすもよしの内容となっています。仕組みを知ること、解析することに興味がある方からの応募をぜひお待ちしています。

受講生の一人がブログを書いているので、参考になるかも:セキュリティキャンプ完走! – Jin Production

真面目な反省は終了後のチューターアンケートに書いたのが一番まとまっていると思うので、それを転載する:

  • リバースエンジニアリング含めハードウェアを扱う講義はリモートの難しさがあった。
    • 受講生とチューターの手元に1台ずつ事前に送付されたが、受講生の手元では初期の分解がうまくいかなかった。
    • 事前学習の期間、およびキャンプ1日目で 我々のサポートは動画やテキストによる間接的なものに限られた。PCやソフトウェアで完結する講義であれば、ソースコードを見てみたり、いろいろコマンドを叩いてもらって出力を見ればなんとかなるケースも多いと思われる。対して、ハードウェアを扱う場合は微妙な接続や状態によって結果が左右されることが多いので、全体を直接見て問題の原因を探れると嬉しいと感じた。
    • 結局キャンプ2日目からはもうひとつ送付しておいた(講師選択の)別の機材を扱うことになった。そちらは比較的簡単に分解できたため修了には問題がなかったものの、こちらも分解できないまま終わる可能性があった。
  • 受講生に適宜Discord上で声をかけるようにしたが、それでも十分ではなかった。
    • 普段Discord等のチャットツールにすぐに返信する(同期的な)使い方をしないので、受講生からのメッセージを見逃してしまうことがあった。
    • また、Xコースは一つの講義室に4つのゼミ(10人ぐらい)が集まっており、雑談含めて会話が頻繁になされていたが、その雰囲気をリモートの受講生と十分に共有できていたか今となっては疑わしい。講義内容の補助は重要だが、雑談ももっと積極的にすればよかったのかもしれない。

昨日はSecHack365のReturnsに行って疲れてしまったので編集する元気がなかった…。キャンプとSecHack365は同じく「セキュリティに興味のある学生向けのイベント」として認識されていて、両方に参加した経験のある人も多いので、どちらかに参加したときにはもう一方についてもいろいろと情報が得られる。

一方でチューターらしくない感想もあった。というか受講生同様にハードウェア等について学ぶところが多く、半分ぐらい「発表義務のない受講生」の気持ちだった。開催前にも時間をちょこちょこ取られるし、期間中は一日中サポートをやるのだけれど、ゼミの受講生が2人だけだったり、ハイブリッド開催ゆえ会場設営などの仕事がなかったりして、そこまでバタバタした感じでもなかった。暇な修了生はチューターも応募してみるといいと思った。今年はチューターが少ないとも聞いたので、通りやすいかもしれない。また、同期の修了生と再会する機会にもなった。

ここ数年のキャンプではグループワークというのがあって、チューターもそれに参加した。そのグループでキャンプ終了後も活動を続けるためのテーマを決めた。結果リレーブログをすることになって、「いろいろ書こうよ、まずはキャンプの感想から!」という話をしていたのだが、タイミングが悪くなってリレーのバトンを数週間延滞してしまっていた。他のメンバーの記事はこんな感じ:

そういう活動もあって、また技術的なアウトプットをやりたいなあと思った。受講生, 運営, 久々に話してくれたチューターのみなさん、ありがとうございました!(遅い!!!!)

*1:応募用紙はwikiにあります

大学編入後の現状

大学に編入して2ヶ月が経ち、夏学期の前半(S1ターム)が終わった。高専の卒研をやっていたときに「編入対策の情報は出回ってきたけれど、入ってからのことはあんまりまとまってないね」という話をされて、「なるほどそうだな」と思ったので、授業の感想を記録しておく。疑問があれば @sei0o まで連絡してください。

筆者は THE 名門校(笑) 明石高専を卒業して、この4月に東京大学工学部に編入学した。他の大学についてこの内容がどれくらい当てはまるかは未知数。

追記 (2022/7/9) 他の編入先については、次のページも参考になる。

高専生のためのまとめ

  • いろんな授業を割と自由にとれるので嬉しい。
  • 編入生以外の友達を授業で作るのはやや難しい。必要に応じてサークル等を活用したい。
  • 受ける後輩はがんばってほしい。試験のときご飯行きましょう。

駒場生のためのまとめ

  • 編入生は工学部3年生(だから寮は豊島)。
  • 編入生は実質2年生(留年が確定している)。
  • 編入生は新入生(今年の入学式に出た)。
  • 科類はない。
  • 教養もない(これは人による)。
  • ALESSはない。
  • 初ゼミはある。

履修のシステム

ちょっとシステムを解説しておく(編入生には入学後詳細な資料が提供される)。東京大学では、四半期をそれぞれS1、S2、A1、A2タームと呼ぶ。そしてS1,S2を合わせてSセメスター、A1,A2を合わせてAセメスターという。通常、1,2年生は教養学部に配属され、駒場キャンパスに通うことになる。工学部では、2年のAセメスター、つまり2Aからは本郷キャンパスで授業を展開する学科も多い。

筆者の所属は工学部3年だが、専門教育が2Aから始まること、および高専生に文系教養が欠けがちなことを鑑みて実質的に2年次からのスタートとなる(2年次編入)。したがってこの季節、筆者は2SのS1とS2の間にいる、ということになる。通常は1年半(1S, 1A, 2S)駒場にいるところを、編入生は半年(2Sのみ)で駆け抜ける。

科目は基礎科目・総合科目・主題科目などに分類される。編入生は二外などの必修に加え、総合科目を(おおざっぱにいえば)文系と理系を最低3コマずつ履修する。それ以上は文系をとってもいいし、理系をとってもいいし、何もとらなくてもいい。総合科目はそんなに課題が出ないので多めにとっても大丈夫。なお、基礎科目に分類される熱力学とか実験はやらない(受けようと思えば受けられる)。

総合科目のとり方はそれぞれの興味・関心・バイトやサークルの事情・受講スタンスによって大きく異なる。ある編入生曰く、最低取得単位ギリギリを攻めると全休を作れるが、面白くなかったり難しすぎたりした講義を切れなくなって後からしんどいらしい。筆者は大学の授業の負担がわからなかったので、とりあえず多めに入れてどうにもならなくなった授業から諦める方針をとった。進振りがないので点数も気にしない。15の優より20の可(?)。

追記 (2022/9/28): この方針を採った結果、面白そうな講義を気ままに受けて、必要な単位も取得できた。参考までに、筆者の評価は、優上2科目・優2・良12・可1(合格2)だった。他の2科目は受講を諦めた(試験が詰まっていて期末レポートを諦めたのが1つ、授業に興味が持てなかったのが1つ)。科目を削って真面目に勉強した他の編入生は、もっと優の割合が高かった(平均はわからない)。通常の進学振り分けでは厳しい点数なのかもしれないが、編入生は単位を落とさないかぎり何の問題もない。5年間 刑務所 高専寮に隔離されて、さらに1年留年させられたのだから、この程度のメリットはありがたく活用させてもらおう。

あと、たぶん教養学部生だと学期ごとの履修単位数に上限がある(キャップ制)が、筆者は週20コマ入れても特に何も言われなかった。今年は最初の2回がオンライン授業だったので、Zoomを3つ開いて同時聴講しながら履修を組んだ。教養学部の授業は講義の名前と実際に扱う学術分野の名前が一致していないとか、わかりづらいことがあるので、シラバス授業カタログぐらいは見るのがよさそう。

今のところ、「高校課程を履修していないから何言ってるかわからない」などの困った事態は発生していない。むしろ教員がナブラ記号を1年生にぶつけてたりするので心配になる。予備校とかでやるのかな?

時間割

以下は取っている科目の一覧。「月1」は月曜日1限の意味。

月1:現代国際社会論

  • いわゆる国際関係論。ODAによる援助の変遷などを見ていく。
  • 記号論理学にすればよかったかも。

月2:ベクトル解析

  • 最後の微分形式以外はほとんど既習だが一応入れてみた。やや退屈だが、雰囲気でやっていたところを埋めてくれるので悪くない。親切で教育的な大学数学の授業。
  • レジュメがわかりやすいので授業出なくていいかなとも思っている。

(月3・4:空きコマ)

  • 惑星地球科学実験:選抜に落ちた。実験系は定員が小さいので、落ちたときのために代替できる授業を探しておくとよさそう。
  • 社会環境論:実験が受講できなかったので、空いた時間で行ってみた。人が多い割に全然おもしろくなくてやめた。
  • 追記 (2022/9/28): 哲学I:『人新世の資本論』の著者が講義をもっているらしいので、本物を見るために潜ったことがあった。冷蔵庫の引き取り手を募集していた。

月5:社会思想史

  • 社会の思想史をたどる授業。年号を覚えるとかそういうことをしないので、ある意味高専の世界史に近いかもしれない
  • 今は啓蒙の時代を扱っている。時代の中心人物にフォーカスをあてて進んでいく形式で、前回はヴォルテールを扱った。
  • 先生が90分ノンストップでニコニコしながら喋っているのでなんか面白い気がしてくるが、実際にはよくわかってない。

火1:初年次ゼミナール(種差を考える)

  • 電気情報工学科を出てもうすぐ電子情報工学科に行くので、ちょっと違う分野にしようと思って生物系のところにした。やはり理IIが多いが、高校生物がわかってない工学部生でも困ることはない。
  • 和やかな雰囲気で良い。ヒッグス粒子のところにした編入生は結構教授に詰められててつらそう。

火2:フランス語初級(会話)

  • クラス指定のない総合科目なので気楽。でも別に友達ができるわけでもない。
  • 初級にはちゃんと喋れない人が集まってくる。
  • 前に年齢を聞く文(Tu as quel âge?)を扱ったときに、20歳は自分を入れて約40人中2人しかいないことがわかった。

火3:フランス語一列1

  • 主に会話。木4に「二列」の授業があって、それと合わせて履修する必要がある。
  • 本来はAセメスターの授業と通年で行う設計になっているが、編入生は受けない。
  • 第二外国語はそれぞれのクラスに入れられる。先生もあまりよくわかっていないようで、たぶん昨年落単したと思われている。理II/III-23組というところに入れられたが、とうてい馴染めそうにないし、クラスが仲良くてみじめになってくるので授業開始直前に教室に行って、終わったらすぐ出ている。もし喋り相手がほしくて、コマの都合がつくのであれば、理I(主に理・工学部に進学)にしたほうがいいかも。
  • 進度はゆっくり。春休み暇でDuolingoをやっていたのもあってやや退屈。

火4:学術フロンティア講義(気候物理学入門)

  • フランス語を流してぼんやりしたところで真面目に数式を扱うので眠くなる。
  • 図書館に海洋・気候学を数式で扱った本があまりないので困る。花輪公雄『現代地球科学入門シリーズ4 海洋の物理学』を読みながら進めている。

火5:計算の理論

  • 理学部・情報科学科(理情、IS)のガイダンス授業。S1はアルゴリズムと計算量。S2はラムダ計算について。理情用語だとそれぞれA分野・B分野となる。
  • ほとんど毎週課題があって、量としては多くないのだが、前半の今井先生のは抽象的な課題が多くてみんな困った。適当な文章を書いて乗り切った。
  • やはりコンピュータに興味のある人が多くて、seccampの話をしている人もいた(行ったほうがいいよ!と背中を押しておいた)。

水1:生物情報科学

  • 理学部・生物情報科学科のガイダンス授業。オムニバス形式で毎回違う教員が講義を行う。そこそこ内容が被る。
  • 生物の話をして、それを情報技術でなんとかする話もあった。たとえば塩基配列はATCGの4つの文字種からなる文字列として表現できるから、そこからお目当てのタンパク質を表現する配列を探すために良いアルゴリズムを使う。シーケンサーの仕組みは「へー」ってなった。
    • その一方で、遺伝子からわかることをずっと紹介する人もいた(これはこれで面白かった)ので、「生物情報」は「ナマの生物や臓器そのものというより、そこから得られる情報としての(エピ)ゲノム等に着目する」というニュアンスなのかもしれない。
    • 適応行動論とも一部かぶる。

水2:外国文学

  • フランス文学。他にイギリス・ロシア文学を扱う同名の講義があったが、履修の都合上ここしか取れず、結果としてフランスだらけになってしまった。
  • もちろんフランス語がわからなくてもついていけるが、たまに韻やら手法の問題で原著を引用しているので、それがちょっとでも読めると嬉しい。
  • これまでにはラブレーとかジュール・ヴェルヌを扱った。
  • 3人の教員が講義を数回ずつ担当する。先生ごとにやり方やトピックが違っていて楽しい。前の先生は小説・物語がメイン、いまの先生は思想のテキスト(モンテスキューとか)を扱うっぽい。
  • 4000字レポート、どうしようかね…。
  • 水1水2は寝坊しがち。ごめんなさい。

水3:英語二列(FLOW)

  • S1だけ。英語でディスカッションする授業。スピーキングのレベルを自己申告する。筆者はレベル3で出して、ちょうどよかった。
  • クラスの割り振り方は知らない。他の人の科類も知らない。
  • 第1回には仕組み上出席できない。これが成績にどのように反映されるかは知らない。おそらくそこで自己紹介的なことをやるので、若干つらい。
  • S2は英語一列を入れる(読解の授業らしい)。編入生は自動的に下っ端のG3クラスに配属される。英語教育支援室、慈悲深い。

水5:統計物理学

  • つまり統計力学量子力学と熱力学をつなぐ分野。量子も熱力もまともに勉強していないが、まあなんとかついていける。
  • 自分がわかっているのかわかっていないのかもよくわからなかったが、第6回目の授業でようやく演習問題が配布されたので復習しやすくなった。まだ解けてないけど。
  • 湯川諭『物理学アドバンストシリーズ 統計力学』の説明に近そう。田崎統計力学Iが詳細すぎて道を見失いそうになるので適宜使い分けたい。

木1:文化人類学

  • 何やってんのかよくわかんないけど、案外おもしろい。キーワードとしては構造機能主義とかグローバリゼーションとか、迷信・呪術とか。先生はガーナでフィールドワークをやっていた。フィードバックが丁寧。
  • 結局人の考えが文化や環境に影響されるか・するかを扱う部分もあるので、認知科学と関連させて考えることもできなくはなさそう。
  • これも寝坊しがち…。Zoom録画があるので助かる。

木2:人間行動基礎論

  • つまり心理学概論。教員の喋りが上手い。
  • スライド上でちょっとした実験もやってくれるので楽しい。実験の内容が独創的で感心させられる。
  • 心理学に対する誤解を解くことにも重点が置かれている。
  • 情報認知科学とも若干被る。他にもいろいろな授業で重なっている部分があるが、復習にはなるし、学問のつながりを意識できるので、それはそれでいいかなと思っている。

木3:適応行動論

  • 対面初回は1323教室の二階席まで埋まっていたが、最近はかなり空いてきた。
  • 遺伝子の話から入って、徐々にヒトの進化・行動に話を寄せていく。化学っぽい回もあれば歴史っぽい回もある。科学技術と思想のつながりも勉強になる(遺伝決定論)。
  • 人間行動基礎論と似て、遺伝にまつわる誤解についても解説が丁寧。

木4:フランス語二列

  • 文法。二外の印象は「火3:フランス語一列」の節を参照。

木5:基礎方程式とその意味

  • S1は量子論。S2は何やるか知らん。
  • シュレーディンガー方程式(基礎方程式)を最初にドーンと出してから、それを書き換えたりいろいろ代入したりするスタイル。とはいえ天下り感が出ないように導出っぽいことをやるように工夫されている。前期量子論はやらないので、プランク黒体輻射云々の話はない。
  • 講義もわかりやすいが、講義資料がそれ以上にわかりやすいのでそっちで勉強して木曜は4限で帰った。あと中間試験が面白かった。資料と試験は濱口先生のページから入手できる。

金2:言語構造論

金3: 生命科学

  • S1のみ。編入生は必須。
  • 生物を熱力学的なシステムとして理解しましょうというノリ
  • 微分方程式で捕食のモデルを書いてグラフに起こしてみたりするのは見ていて面白かったけれど、化学的な組成とか機構にはあまり興味を持てなかった。
  • 先生が楽しそうにしゃべっていてよかった。

金5:情報認知科学

  • 認知科学認知科学のアプローチ自体、現代的なコンピュータによる情報処理をモデルとするものが主流だそうで、だったらわざわざ「情報」ってつけなくてよくない?という気はする。
  • 記憶が箱ではなくて繋がりであるとか、どこかでなんとなく読んだり考えたりした話をちゃんと説明してくれるので嬉しい。
  • 対面でもオンデマンドでも受講できる。4限が空きなので、まあ帰るよね…
  • 金5の現代経済理論も検討したけれど、教員のギャグがつまらなかったのでやめた。

S2が終わってからここはまた更新したい。

施設

生協食堂が混みすぎ。12:40以降に行くとそこまで並ばない。いつも1Fのカフェテリアに行っていて、2Fには足を踏み入れたことがない。生協書籍部は1割引で本が買える。オライリー本もまあまあ入っているのでオタクにも嬉しい。

駒場図書館が食堂の近くにある。マスコットキャラがかわいい。自習スペースは広いが人も多い。昼休みは暇なのでここでぼんやり本を読んでいる。工学系の書籍は高専より若干多い程度。工学に関連しない書籍はもちろん桁外れに大学の方が充実している。

寮生活

あくまで所属は学部3年なので、三鷹ではなく豊島の寮に入ることになる。A棟とB棟がある。筆者のいるB棟では、部屋が10個集まってユニットという単位になっている。キッチンやシャワー、トイレはユニット単位で設置されている。空き部屋もあるし、自炊しない人の方が多いので、10人で1つのキッチンを使うことには必ずしもならない。筆者のいるユニットでは2人しかキッチンを使わないのに対して、ある編入生のユニットでは混み合ってなかなか使えないらしい。

学部や学年がごちゃまぜなのもあって、交流はあまりない(高専1年生の部屋の隣に専攻科2年が住むのを想像するとわかりやすい)。キャンパスではみんながグループを作っているので相対的に惨めな気分になるが、こちらではほとんど誰も喋らないので気楽。編入生で集まってレポートをやるとか、そういうことはする。あと、向かいにいかにも理系な人が住んでるな〜と思ったら、同じ高専の先輩だった。

パーソナライゼーションとプライバシー

ここ半年ぐらい、こういうことを思いついたときはScrapboxやDynalistにまとめて、思いついたときに随時書き足せるようにしておいた。それで、ある程度まとまってからブログ記事にしようと思っていた。しかし、結局それからブログ記事になったものは一つもなかったし、ある程度しっかり考えるにはそれに専念するような時間を持たないとどうにもならないことに気がついた。だから、やっぱり浅い考えでも書きたいな〜と思ったら、短い記事でも書くことにした。いま思えば、Scrapboxにしたのは、後から簡単に編集できる*1以外にも、公開度の問題や、話をうまくまとめる目的もあった気がする。まあそのへんのニュアンスは気が向いたら書くとして…。

更新しなさすぎてとうとう広告が出てきてしまったので、何でもいいから書いてそれを消したい、というのもある。最近書こうとしてもなんだか気張ってしまって書けなかった(某ブログに取り上げられた影響もあるかもしれないw)が、今回は日付が変わる前で眠いので、あんまりそういうことを考えずに打ち込めている。


パーソナライゼーションというのは、「〇〇さんにおすすめ」というアレとか、似たような広告がたくさん出てくるとか、そういうこと(サジェスト・レコメンドなどの用語があるが、眠いのであんまりちゃんと分別しないことにする)。ユーザとしては、別にあってもなくても困らないのだが、いろいろなサービスがこれを実装している。で、こういったパーソナライゼーションには、それを行うための素材となるデータが必要になるから、サービスは必然的にユーザの属性や行動を貪欲に探り当てていくことになる。そして探り当てたデータ(好み、年齢層、訪問する時間帯などの属性と行動)はサービスのデータベースに送られて、次のページで表示するレコメンドの材料になったり、蓄えられて未来のユーザとの比較対象になったりする。

ただ、この探り当てたデータが、ユーザを離れて事業者のサーバに移動されてしまうと何をされるか・何に使われるかわからない、プライバシーが守られない、というのでユーザが不安になったりGDPRが施行されたりした。パーソナライゼーションとプライバシーの2単語で検索すると、二者の「境界」とか「兼ね合い」という単語が目に付く。

しかし、購入履歴にせよ、年齢層にせよ、そのような懸念が生じるデータはもともとユーザが持っていたものであるはずだ。別の言い方をすれば、ユーザの持ち物をサービスが持っていってしまうから懸念が生じた。持っていたけれど、あまりに些細だったり当たり前だったり、集計するのがめんどくさかったりして放置されていたデータを、たまたまアルゴリズムが見つけ出して、サーバに持ち帰ったにすぎない。レコメンドエンジンがある商品を勧めてきたときに「これはいらないな」と思うのは、エンジンが(推論含め)獲得したデータと、ユーザ自身が判断に使う自己のデータに差があったからだ(ユーザ自身は自己のデータを全て持っているから、その判断は常に「正解」になる)。

そこで、ユーザが持っているデータを、サービスではなく自前で掘り当てさせれば、勝手に知らないサーバに投げられることもなく安心なパーソナライゼーションが実装できるのではないかと思った。「兼ね合い」ではなくて「両立」できないのかな?と。ここで自前で掘り当てるといっているのは、ユーザが自己啓発本を読んで自分の性格を分析するってことではなくて、ユーザの管理下にあるコンピュータ(だいたいの場合サービスを利用する端末)で、クライアントの立場でデータをアルゴリズムでかき集めてくる、という意味。

たとえばECサイトのレコメンドにおいて、必要なのは個々のユーザのデータ(嗜好、予算、訪問頻度…)と商品のデータ(商品の概要、在庫、価格…)、それからこれまでのユーザのデータが蓄積されたデータベースである。データベースを使うと、「このカテゴリを見にくる人は20代の男性が多い」など、やや抽象的な傾向が入っている。これらのうち、個々のユーザのデータはクライアントで取得できる。そもそも、サーバに送られていくユーザの行動は、クライアントとなるブラウザ・アプリとユーザの間で起こることの一部分でしかあり得ない。ユーザと直接対話するのはクライアントであって、サーバではない。

商品のデータはやや難しいが、スクレイピングAPIを使えば理想的にはなんとかなる気がする。もちろん、サービスが持つデータへのアクセスについては、レコメンドエンジンは一般ユーザやサードパーティー開発者と比べると特権的な位置にあるだろうから、現実的にはそう簡単にはいかない。最後にデータベースだが、これはレコメンドを使いたいユーザが集まってデータを出し合えばよさそう*2。ユーザがデータを出し渋るような気もするが、それまで一企業に嬉々としてデータを提供してきたのであれば、特に問題はないと思う。レコメンドの実装については詳しくないし、大手がどのようなエンジンを使っているのかも知らないが、小さなサービスであればOSSのエンジンを使用するものもありそう。その場合は同じOSSを使えばアルゴリズムの能力的には対抗できる。

だから、「パーソナライゼーションがほしい」というのはプライバシーを諦める理由にならないかもしれないと思った。

すげー眠くなった。もう寝るが、またなんか思いついたら追記する。

*1:簡単に、というのは「書く画面と読む画面が同じ」というレベルの話で、「編集ボタンを押したら編集画面に移動して、読むときとは違う記法(Markdown)だがすぐ書き直せる」ブログレベルの簡単さではない

*2:口コミの定量化と捉えられそう

たのしい潮寮生活 3

明石高専 電気情報工学科4年 (4EJ) のsei0oです。この記事では「潮寮」こと明石高専学生寮について紹介します。 一応高専 Advent Calendar 2019の記事です。大遅刻。言及してもらったのに申し訳ないなあ。数ヶ月ぐらい下書きのまま放置してしまい公開をやめようかと思いましたが、新型のコロナウイルスで春休みが伸びたので時間をとって修正しました(連続外出自粛記録更新中)。休校の暇つぶしにご活用ください。

「たのしい潮寮生活」について

潮寮についての記事のシリーズで、1年1つ書いています。3年生なので、この記事で3つ目になります。高専への進学を検討している中学生や、通学している同級生に寮がどんなところか知ってもらえればと思って書いています。毎年毎年同じことを述べてもしょうがないので、昨年との比較を主に書いています。入寮からの寮生活(と筆者の文体)の変化を追いたい人はたのしい潮寮生活たのしい潮寮生活 2も参照してください。

また、高専自体(授業など)についてはあまり書きません。その辺の話はTwitterで検索をかければたくさん出てきます。筆者は男子寮生なので女子寮のことはわかりません。B寮でのたのしい潮寮生活が詳しいです。 新入生は公式サイトも見ておいた方がいいです。あくまで個人の考えなので、「入ってみたら記事と違うじゃねーか」などあるはずです。実際の生活で困ったら誰かに相談しましょう。後輩曰く「親がこのブログを見ていた」そうなので、今年は予防線を多めに張っておきます。

そろそろ本題に入りましょう。さらっと潮寮の全体像をおさらい。

  • 居住区:A寮(低学年男子寮)、B寮(女子寮)、C寮(高学年男子寮)、B寮別館(国際交流センター・留学生用?)
  • 施設:食堂・浴場・中央棟(事務) あとは池とか花壇とか

全体的な環境

挨拶

先輩の姿を見かけたら挨拶するルールがあります。いや先輩後輩関係なく、お互いに挨拶するルールだった気もしますけれど、こういうのは一方通行にならざるを得ません。A寮だと寮長以外の上級生がいなくなるので、挨拶を返す側になることが多くなります。正直面倒だけど、しょうがない…。食堂に行くまでに4回以上挨拶を交わすとDoS攻撃を食らっている気分になります。また、ここで身につけた雑な挨拶を学校の外で使いがちでわりと困ります。

ところで、悪名高い大声挨拶(過去記事参照)は指導層に反対派が増えてきたのでなくなりました。すなわち今の1年生は大声挨拶を知らない世代です。いまこの記事を読んでいる次期指導寮生は「復活させよう」とか思わないように。低学年への指導方針が緩和傾向にあり(あるらしい)、それがまずいと考えている人もいるようです。

個人的には、皆が思いやりと誠意をもってやっていけば規律はそこまで厳しくなくてよいと思います(適当)。寮に慣れていない新入生は思わぬところで迷うので、そういうのを具体的に伝えるのが大事なんじゃないかなあ。シャワー室の掃除マニュアルは良いと思う。向こう1,2年はこのトレンドが続きそうですが、指導方針はそのときの指導寮生によってコロコロ変わるので以降はなんとも言えません。「理不尽に耐えよう」って3つ前の全寮寮長も言ってたし。

イベントとか

予餞会、名ばかりの新入生歓迎会、などなど(2年前の「たのしい潮寮生活」参照)は健在です。体育大会などは出なくても何も言われませんでした。「3年からは上級生」という風潮はまだありますね。この辺はよくわかりません。

長期の留学生が増えた(気がする)

ドイツやザンビア(だったかなあ…)からも来ているみたい。イスラム教徒もいるので、食堂で隣り合わせたりすると左利きの筆者は「不浄の手でメシ食ってすいません…」と思ってしまいます。国際交流センターに加え、A,C寮にも滞在するようになったので顔を合わせる機会も多いです。夜は食堂が開放されていて、留学生のRA(Residence Assistant)として割り当てられた日本人学生と一緒に互いの言語を学んだりしているようです。

細かいことをいうと、A寮に指紋認証が入ってドアが閉まるようになったので、深夜は外に出づらくなりました。たぶん。

筆者の部屋

恒例の写真です。移動直前に撮ったのでかなり汚いです。

部屋全体像

一人部屋に移った でもちょっと書きました。潮寮では毎年2月・学年末試験明けに部屋が変わります。新入生・新2年生は二人部屋、新3年生以上は一人部屋というのが通例です。筆者は3階の一人部屋に住んでいました。昨年の改修は1・2階のみだったので、3階は ボロい 昔ながらの雰囲気が残っています。

昨年と逆側なので、部屋から食堂の様子が伺えないのがちょっと残念です。風呂に向かう人々の騒ぎ声は聞こえなりましたが、向かいのB寮の入り口から指紋認証のエラー音が聞こえるようになりました。寒い時期に6回ぐらい失敗しているのが聞こえると気の毒になります。

窓

窓も独り占めです。横付けでベッドを置いて寝られると、日光が入るので起床が楽になります。庭の木で春夏秋冬の移り変わりを感じられます。葉を青々と伸ばす夏、そして散らす冬。日の出と時を同じくして目覚め、オリオン座とともに眠りにつく…。仰向けになって空を流れる雲を目で追いながらぼけーっとするのが楽しいです。まあ普段はブラインド閉めっぱなしでほとんど外見ないんですけど。

周囲の環境

うるせえ! なんか無限に運が悪くて、周りの部屋に騒がしい人が集まってきました。

向かいの2人部屋

Pioneerのターンテーブルがあって、現地のDJによるEDMのミックスがほぼ毎日楽しめます。年度始めはどこかで聞いたことがある曲ばっかりかかっていた気がしますが、最近はそうでもないので、成長はしているようです。知らんけど。

寮務から注意してもらったようですが改善されませんでした。周囲がそこまで気にしないのに自分だけがいうのはまずいかなーと思って静観しつつ、たまにドア越しに怒鳴っていました。しかし当のDJはどこ吹く風。強烈なドロップは筆者の不満さえも吸い込んでしまうのでした。

隣の部屋

3E寮生御用達ゲームセンター。マインクラフトとモンスターストライクがメインだったけれど、最近は麻雀も楽しんでおられるようです。さすが旧ゲーム制作同好会の長。造詣が深い。

隣の大部屋

大部屋には2年生1人と1年生3人みたいなバランスで住んでいます。で、そこにお友達が大量にくるのがお決まりのパターン。ドアを開けたまま騒ぎやがるのでトイレに行くついでにしょっちゅう閉めています。新入生歓迎会・挨拶まわりで浮かんだ同情心がわずか数日で吹き飛びました。学年末試験が近くなると、「勉強するならよそでやれ」と ワード アート モリモリ の警告文がドアに貼られました。2年生が見かねて貼ったのでしょう。自分もそうすりゃよかった。

補食室

たまに人々が集まって料理してます。たまに夜中にチヂミを作って騒ぎ倒す集団がいます。

以上は極端なケースです。騒音が嫌な人は大部屋の隣を選ばないようにしましょう。平均の音量でいえば学校の教室よりかはマシなんですけれど、生活空間でこれだとちょっと疲れるので、耳栓でなんとかやり過ごしました。

3年になってから…

3年といえば、消灯なし! 個人的には前と変わらず23:30ごろに寝ていますが、ときどき資料作ったりレポート書いたりするのに夜更かしできると便利です。朝の点呼とラジオ体操もなくなりました。地味にいい話。鍵を自由に閉められるのも大きかったです。二人部屋だと同部屋がいるので閉められないんですよね。プライバシーが尊重される感じがして落ち着きます。

一言で言えば、気楽です。

対してデメリットを挙げるなら、上に挙げた義務がなくなるので、生活の崩壊リスクが高まります。何度か寝坊(絶起)しました。基本的に耳栓とアイマスクをつけた状態(この時期はマスクも)で眠りについているので、深い睡眠と朝の放送が重なると目覚められません。授業が始まって数十分経ったら寮務が起こしに来るけれど、それも、ねえ…。

人間関係

一人部屋になると「同部屋の先輩・後輩」として知り合うルートがなくなるので、1年生の知り合いはほとんどいません。コミュニケーションの機会は部活と週一度の掃除以外にほぼありませんでした。

同級生が隣の部屋だったので、互いの誕生日は人呼んで集まってカードゲームなどをしたり、たまに後輩の部屋で話したりするのは変わらない点でした。でもやっぱり、総合して人との会話量は減ったかなあ。ひどい日だと1日25分のオンライン英会話以外の会話をしていません(それは寮ではなく本人の問題では?)。

おわりに

楽しかったA寮ともお別れして、次はいよいよ壁の薄さが評判のC寮です。A寮でも隣の部屋のコンセントを使う音が聞こえるのに、一体どうなってしまうんだ…。とはいえ来年のこの時期は編入試験で忙しそうなので、書けるかわかりません。もっとこのシリーズパクられないかな〜

よくわからない箇所等あれば @sei0o もしくはコメントにお願いします。

フォローとミュート

Twitterフォローしているユーザを全員ミュートするスクリプトを書いた。このスクリプトTwitterアカウントに適用するとフォローしているユーザが全員ミュートされ、タイムラインには自分のツイートだけが表示されるようになる。ツイートを読みたいユーザだけをミュート解除する「ホワイトリスト」方式でタイムラインを再構築できる。

Twitter APIの実行制限により、実行にはちょっと時間がかかるので注意。自分の環境では200ユーザをミュートすると制限に引っかかって15分待たせると制限が外れた。この15分という値は公式のドキュメントから引っ張ってきたもので、もしかするともう少し短くても大丈夫だったかもしれない。

わりと「ミュートするぐらいならフォローを外せばいいのでは?」「ブロックしちゃえよ」というツイートをよく見るので、それらに対する反論とまではいかなくても、これを作った理由について書いてみる。

まず、フォローに関する考え方がユーザによって大きく違うということが挙げられる。たとえば自分の場合、個人的な知り合いはフォローするのが原則で、その次にツイートがおもしろいかそうでないかというのがフォロー・アンフォローの重要な判断基準として来る。同じ学校でも学級・学科が違えば知り合いでもないし、そんなに興味の方向が一致するわけでもないので最近はフォローしないし返していない。ただ相互フォローという状態は長くもつことが多いため、入学の時期などは新入生に情報を流すためにもフォローを返していた。

しかし他のユーザは他の判断基準を持っている。以前学校の人のアカウントのフォローを解除したとき、後にその人が「どうしてsei0oにフォロー外されたんだろう」というツイートが、例の「○○さんがいいねしました」によって流れてきた。フォローを外した理由としては単純にツイートに興味が持てなかったからなのだが、その人にしてみればそれだけでフォローを外されるのは少なくともツイートする程度には意外だったということだろう。自分がオタクである以上興味の範囲も狭く、どうしようもなさそうとはいえ、あえてそういう驚きを与える必要もないので相手に知られないミュートを活用するようになった。

別の言い方をすると、フォロー機能を「発言に興味があります」と「〇〇さんですね、知っています・仲良くしましょう」という2つの意味にまたがって利用しているところが自分にはあって、他にもそういう使い方をしている人がそれなりにいそうだと感じている。もともと意図されていたのは「あ、この人おもしろそうなことやってるな」という前者の使い方で、対して実際には、会ったらTwitter交換して相互にフォロー、というような流れが勉強会などでしばしば起こる。これには後者のニュアンスがある(発言を見て判断しているわけではないから)。「個人的な知り合いはフォローするのが原則」と先に述べたのもこっちの意味合いが強い。特にフォロワーが多い場合など、純粋に前者の意味だけにフォロー機能を用いているユーザもいる。

次に、同じ内容を繰り返し見たくないと思っていたから。自分がフォローしている界隈だと、高専ネタとか「科学技術予算が足りないぞ〜」系、診断メーカー系も見飽きている。数日〜数週間で過ぎ去る炎上なども同様で、最近ならISUCONやホワイトボードの落書き、ちょっと古い話題なら京アニCoinhive事件・さくらんぼ計算が良い例。普段興味深いツイートをしている人がこういうのをリツイートしていると、なかなかやりづらい。そこでミュートをよく使っていた。ところがユーザのミュートは時限を決められず、手動で設定・解除しなければならないので億劫かつ間に合わない。そしてそのようなツイートを一度見てしまったという不快感は取り消すことができない。

口が悪い人やいつもよく喋る同級生についても、普段はミュートして気になったらアカウント名で検索して見に行くという方法を採っている。なんとなくこれを広げて「全員ミュートしたらどうなるかな?」と思ってスクリプトを書いた。結果はこれから使ってみないとわからない。

ちなみにリストは作るのも面倒かつアクセスするのも面倒なので使っていない。Twitterアカウントを他サービスの認証に利用していて、連絡もTwitterで取ることが多いため、Twitterをやめるというのも考えていない。

言葉にしてみるととなかなか微妙な話題で、うまく理由としての論理がまとまっていない気がする。まあいろんな使い方があるツールだと思うので、自由に使ってください。

セキュリティ・キャンプ全国大会 2019 に参加した #seccamp

IPAが主催する セキュリティ・キャンプ全国大会 2019 の 集中開発コース リバースエンジニアリングゼミ (X-IV) に参加した。以下は参加記。ちょっと量が少ないけれど、一晩寝かせても特に何も思いつかなかったので公開してしまう。

来年度以降参加する人へ

  • ゼミのSlackと全体連絡のkintoneは両方見ておこう
  • 名刺はいつでも持ち歩こう
    • 財布や名札に十枚程度入れておくと便利
  • いろいろもらえるので、スーツケースには少し余裕を持たせておこう
    • OS自作入門換算で1.5冊

https://i.gyazo.com/db4e3b51d39f7b38556ed3c219736387.jpg ↑いろいろ


当日の朝、大阪から新幹線にスーツケースと頭痛を持ち込んで移動。中国から来たという人に熱海の場所を教えたりしていた。少し早く着いたので適当に時間を(あえて各停に乗るなどして)潰しつつ入場。荷物を預けてすぐにレストランで昼食を取った。いきなり名刺交換が始まっていた。それからは全体向けの講演を3つ聴いた。往路の疲れとオカムラの椅子の心地よさで途中少し眠くなってしまったが、アクエリアスに救われた。

LT大会

複数のLTが同時並行で行われたのでどれかを選ぶ必要があったが、優柔不断なので会場の中央からどのスクリーンも目に入るような位置で眺めていた。GPUをCPUにしていたり、reCAPTCHAにツッコミを入れたりしていて聞いていて楽しかった。

企業紹介

企業の方の仕事内容についてのプレゼンを見た。Incident Responseや社内環境の整備だけではなく、マルウェア解析といったリサーチ職を金融系の企業でも設けているのが意外だった。事前アンケートは答えましょう。

ところで就活はまだ先。コンピュータやセキュリティそのものは一応好きだ/興味があると言えるのに対して、それで食っていくとか向いているとかそういう話になるとまだ自信が持てないでいて、むしろこういうイベントに参加させてもらうたびにその自信が削れていく気がしてアレ。セキュリティ業界で働くのではなく、セキュリティの有用性を知ってもらうというのがキャンプの目的らしいので、受講生として歓迎されないわけではないものの。

https://i.gyazo.com/322291b82fab863db732835cbcea484d.jpg ↑いろいろ (2) あるところは企業紹介でTシャツもらったらしい

グループワーク

昨年までのやり方は知らないのだけれど、今年からやり方が変わったらしい。「キャンプが終わってから何がしたいか」という共通点でチームを作り、講師やチューターに話を伺いつつ「どうやるか」「まず何をするか」の部分を固めてまとめる、という内容だった。自分たちのチームは「技術商業誌を出そう」というテーマになった。(同人誌ではなく)商業誌、をあえてゴールにしているのも講師のアドバイスによるもの。聞くといろいろ情報を引き出せてやっぱりすげえなあ〜となる。いろいろな人がいて楽しい。

イベントが終わってから何かを続けていくのには仲間が必要というのはよく言われることで、しかしながら学校やオンラインではその仲間を見つけるのが一番難しいというのがあるある。今回のグループワークでは知識のアウトプットとして本を書くというテーマで他の受講生と集まることができたので、モチベーションを維持してなんとか形になるものを作りたいなあと思っている。

講義

事前課題では主にハードウェア面(SPIとかUARTとか)を扱う方法を学んでいたが、結局ずっとソフトウェア周りであれこれリバエンしていた。rootを取ったので root取っ太郎 になった(ゼロデイ見つけたとかそんな偉大なことをしたわけではない)。内容を詳しく書けないところからリバエンゼミらしさを感じ取ってほしい。見た目がわかりやすいので人が集まってきてワイワイしながらいろいろ教えてもらえたのでお得だった。他のゼミが隣のテーブルで講義していて、何をしているか見られるようになっているのがよかった。まだまだ気になる部分はあるので、寮に戻ってからいろいろやってみる。

講義が終わって風呂入ったらすぐに寝てしまった。もうちょっといろいろな人といろいろなことを話せればと思った。そういう点は相部屋のメリットかなあ(SecHack365と対比して)。積極性に問題があったかもしれないし、純粋に疲れてるのもあった。

最終発表

4分ぐらいで自分が何をしたか発表した。一番ネタっぽいプレゼンだったと思う。その証拠として本来ならばスライドをアップロード…したいとはいえそれもなかなかマズい感じなので1枚目だけ貼る。1枚目でも十分マズいかな。言い訳しておくと「root取っ太郎」は自分で名乗ってたわけではなくて、講師の黒林檎大先生が推してきたものです。

https://i.gyazo.com/9b79f24d59234070ad9e432a6171e6ab.png


インタビューを受けてほしいと依頼されたので部屋に向かうと、キャンプ前と後で変わったこと・感じたことを即席で考えてほしいと言われ、(ちょっと相談したけど)カメラの前で手短に喋った。その合間に(本業がマルウェア解析の)カメラマンの方と互いの経験とか思いについて話していたのだけれど、時間切れでその後続きを話せなかったのが少し残念。そういう途切れた状態のほうが印象に残るかもしれないが…。インタビューの動画は後日Youtubeにアップロードされるはず。修了証をゼミの代表で受け取った後にも感想を喋ることになった。前日のインタビューが考える準備になっていたとはいえ、やはりいきなりだったので何を喋ったか自分でもよく覚えていない。ツッコまないで。

他のいろいろな場所で会った人と再会できた。Life is Tech!とか明石高専祭とかミニキャンプとか。不思議なもんですね。あと案外お互い顔を覚えている。

寝る間もないとか、一発パンチを食らわされるような衝撃とか、そういったものは(残念ながら?)なかったが、GMの上野さんの閉会式での言葉を借りると「ボディーブローのようにじわじわと」自分に影響を与え続けるものにこのセキュリティ・キャンプはなる予感がしている。5日間ありがとうございました。

セキュリティ・キャンプ全国大会2019の選考に通った

セキュリティ・キャンプ全国大会2019の書類選考に通って集中開発コースのリバースエンジニアリングゼミに参加できることになったので例に倣って応募課題とそれに対する自分の解答を置いておきます。応募は2,3回目で2年前に応募して不合格になっていました。昨年はSecHack365などで夏の予定が埋まっていたので応募しませんでした。

応募用紙

問1: 今までにリバースエンジニアリング(分解や解析など)した経験を好きなだけ語って下さい。対象はソフトウェアやハードウェアに限定しません。

ICカードリーダ

秋葉原のジャンク街でSONYのRC-S310を300円で買いました。RC-S310は2001年発売なので私の同期です。公式のホームページに「NFCポートソフトウェア」なるものが転がっていて、現在公開されているRC-S310対応のプロダクトはこれだけでした。

当然Windowsでしか動作しないのでVirtualboxで動かしつつWiresharkでUSBの通信を見てみると、カードをかざしたり外したりするたびにずらずらパケットが流れるのが見えましたが、結局どれがどういう意味を持つパケットなのかわからずに終わってしまいました。FeliCa(NFC)規格とPaSoRi(カードリーダのブランド)のパケットがごっちゃになっているのかなあと予想しました。

libpasoriやlibpafeといったライブラリが開発されていましたが、いずれも動作しませんでした。中古のWindows機を手に入れたので、うまいこと解析して部室の鍵開けを使い道のないICOCAなどでできないだろうかと考えています(電通大MMAのKagisysのイメージです)。

MacのACアダプタ

5年弱使っていた純正のMagSafe1 ACアダプターが断線してしまったのでAmazonから安い非純正品を買いました。

使い始めてから1年ほど経ったある冬の夜、部屋のベッドに座って壁にもたれつつ脚を伸ばし、そこに掛け布団を敷いた上にさらにMacBook Proを載せて使っていました。 そうするとすぐ寝落ちしてしまいました。1時間ほど経って目が覚めました。

Macを充電していたケーブルを取り払おうとアダプタに触ると…熱い!いままでとはひと味違う熱さと焦げ臭さを放っています。布団に長時間挟まれて熱がこもっていたようです。

Mac用ACアダプタは白い角丸ボディが特徴で、その非純正品もデザインを踏襲していました。しかし目の前にあるアダプタは変形して工業製品というより粘土工作のような形になっています。 つなぎ目の部分があらわになっていて、爪を入れて力を加えると中の電気部品が見えます。

その後数ヶ月ほどで完全に充電できなくなってしまったので、新しいアダプタ(やはり非純正品)を注文した後に変形したアダプタを分解してみました。 ケースのつなぎ目に(物理的な)鍵を差し込み「てこ」のようにしてこじ開けると、白い長方形の基盤にコンデンサやトランスが載っていました。2辺は金属板に挟まれています。よく見るとケース内部に焦げたような跡もあります。 基盤とケースもボンドのようなもので雑に固定されていたので、また鍵を隙間に差し込み外しました。 基盤の裏側には厚膜チップ抵抗(調べて名前を知った)が十数個ハンダづけされています。「新HD60P02A」と型番がプリントされています。

見るだけでも楽しいですが、せっかくなので部品を取り外すことにしました。 はんだごでではんだを熱して、液状になったのを向こうに弾き飛ばすという怪しい方法を使います。学校の実験で先生が「あんまり推奨される方法ではないけど...」と言いながらやっていたのを真似しました。はんだ吸い取り線は持っていません。

外側からケーブルとの接続部分、金属板、よくわからない素子、というように外していきました。小さい部品は大変でしたが一個一個外していくと基盤表面の印刷が見えてきました。金属板があった場所には「HS2」と書いてあったのでたぶん放熱用のヒートシンクではないかと思います。 大きなコンデンサやトランスも収穫できました。使いどころはありませんがそのまま取っておいて、いまの充電器が変形したら分解して比較するつもりです。

MacBook Pro (2012 Mid)

突然電源がつかなくなってしまいました。Macが動かなくなった際の常套手段であるPRAMやSMCのリセットを試しても変化がありません。 いろいろと調べるとバッテリーを付けて取り外すこと(放電)で直るかもしれないとわかったのでドライバーを借りてきて分解し、無事起動することができました。このMacは古いのでまだネジが公の場に姿を表しています。知り合いの薄いMacBookを見るとネジ穴もポートもないので、なんだかなあと思ってしまいます。この件以来Macの分解をよくするようになりました。

情報工学研究部の部長として、コンピュータの基礎的な部分を講義することがあります。そんなときもどこからともなくドライバーを取り出してMacの裏蓋を外し「これがSSDです」と見せると下級生もドン引きして印象に残るようです。 また、これは分解ではありませんが作業中にFキーとNキーのカバーが飛んでいきました。カバーの下のゴムが丸見えになって、メンブレンキーボードの仕組みがよくわかるようになりました。

CTFのrev, network, android rom

最近はあまりプレイできていないのですがCTFが好きです。その中でもpwn/Binary exploitation・reversingといったジャンルを好んで学んでいます。低レイヤに興味を持ったのも、NICT主催のSecHack365というハッカソンに参加したのも元をたどればCTFがきっかけで、そこではコンパイラ(LLVM)やエミュレータ(QEMU)の改造をしていました。成果発表会で使った[ポスター] (https://sechack365.nict.go.jp/achievement/2018/?2018-34) が公開されています。

Android, iOSアプリを解析する問題もあったので、mitmproxy, otool, Fridaなども使ったことがあります。ARMアセンブラは勉強中で、まだx86とPICのそれしか読めません。

ブログ

普通の電卓

昨年の夏頃に中華人民共和国・某省某所のとある工場長の方からTwitterのDMで連絡をいただき「電卓を作りたいんやけど手伝ってくれん?」と連絡があり、いろいろと自分なりに調べていました。 とりあえず既存のものにどういう部品が含まれているか見てみようということで安い電卓を仲間で集まって分解してみました。 外から見える部品には7セグのディスプレイ・光電池パネル・ボタン用に穴が開いたフレーム・多数のボタン。ボタンはシリコンで出来たシートの突起と噛み合っていて、ボタンを押すと突起の裏側にある黒い膜がPCB基盤の丸い部分に触れる仕組みになっています。

PCB基盤をひっくり返すと「CT060」という型番らしきものが刻印された緑色の面があります。7セグディスプレイがフラットケーブルで接続され、ボタン電池が基盤のホルダーのようなものに入っています。電卓を買ってきて光電池を充電しなくてもすぐ使えるのは基盤に直でボタン電池を取り付けているからだとわかりました。明るい緑色で少し光沢を持った線が多数伸びています。その線は基盤中央から少し上にある黒い円に入っていきます。この中に計算を処理するチップが入っているのではないかと推測しました。黒い円はエポキシ樹脂という熱硬化性をもつ素材です(おそらく)。 円形の黒いエポキシ樹脂を溶かして覆われたチップを取り出す方法も見つけました。「熱硬化性の素材は一度固めると特殊な溶剤なしには溶かすことができない」というオンライン辞書の記述は一度無視することにしました。

https://www.youtube.com/watch?v=OiPe6f4Oh8E では熱湯に基盤ごと入れて熱する方法が紹介されていました。一般的なエポキシ樹脂のガラス転移温度(Tg; この温度を越えるとやわらかくなるらしい)は75℃のものから250℃を超えるものまであるので、水を沸騰させて100℃にすれば電卓の樹脂も溶けるかもしれません。実際に試したところ、何の変化も得られませんでした。

次は https://www.wikihow.com/Remove-Epoxy で見つけたはんだごてで熱する方法を試してみました。普段使っているはんだごては30W, 480℃なので熱湯よりは期待できます。実際に熱したはんだごてを当てて数十秒待つと黒い樹脂の表面がぬるぬると溶けてこて先が滑る感覚がありました。これならいけそうだと思い1時間ほど当てて見ると、1mm四方取り除くことに成功し下の基盤が見えました。円は半径8mmほどで、面積はπ88=201mm四方です。201時間はんだごてを当て続けるのは定年退職後の暇つぶしにとっておきたいので、別の方法をあたることにしました。

とにかく高熱に当てればよいことがわかったので、部屋にあったオーブントースターで基盤を熱してみました(これもどこかのサイトに書いてあったことですが、リンクをなくしました)。しばらく放置しておくと「ポン!」と破裂音。基盤を取り出すと小さくて気づかなかったLEDが赤く光っています。ボタン電池を取り外さずに熱して、回路がショートしてしまったようです。電卓の筐体の外から見えない場所になぜこのLEDが存在するのかはわかりません。基盤は熱でプリントが膨らみところどころ気泡ができていました。PCB基盤の層構造を体感しました。

見つけたアプローチの中でまだ試せていないのがヒートガンで熱する方法です。これ以外に使用する場面がなさそうで購入をためらっています。

関数電卓

エポック樹脂が剥がせなかったので、他の電卓を探して分解することにしました。古い関数電卓なんかは樹脂で覆われていない場合もあるそうなので、メルカリの500円クーポンを使って490円の中古関数電卓を買いました。複素数の計算すらできないCASIOのfx-290です。届いてからさっそく分解してみると…そこには黒い光沢のエポック樹脂がありました。蓋をそっと閉じて、いまは机の引き出しの奥に眠っています。

BLEな電球

どこかの勉強会のスライドを見て触発され、IoTなハッキングがしたくなったのでAmazonで安いBluetooth対応の電球を買いました(「Matchdor」というブランドで今は見つからず)。 スマホと機器間のBluetooth通信を取ってくる方法としてAndroid端末でHCIスヌープログという機能がよく紹介されています。しかしiPhoneしか持っていなかったのでApple公式のデバッグ用プロファイルを導入するなどしてなんとかログを取ってきて読んでみましたが、これもGATTなどプロトコル周辺の関係がよくわからないまま放置されています。

家の古いルーター

802.11nにすら対応していない家のBUFFALO製無線LANルータ(型番はWHR-AMG54)につながりづらくなってきたので新しいルータを卒業式の帰りに買ってきました。

古いルータは特に使い道がなかったのでバラしてみました。どことなく年季が入っていてホコリだらけです。中に緑色のPCB基盤が入っていて、BroadcomとEtronTechという会社のチップが見えます。

基盤の印刷を見ていると端の方に「WHR4-AG54A REV:XC」という表示を見つけました。製品の型番と似ても似つかない名前なので検索してみると中国語のフォーラムが出てきました。JTAGのポートが装備されているようです。データを読み出す方法がわからなかったり調べてみるとbaudrateを特定するのに別途キットが必要だったりすると知って以降は触ることができていません(Bus Pirate・Shikraといったハック用のツールや、汎用的に使えるオシロスコープ・ロジアナもどれがよいのかわからなくて定期的にAliexpressを覗いては足踏みしています)。

問2: あなたが今一番リバースエンジニアリング(分解して仕組みが知りたい)したいものを紹介して下さい。

この前頼まれて実家のテレビでAmazon prime videoが利用できるようにFire TV Stickを購入・接続しました。 Fire TV Stickは無線LAN経由でインターネットに接続して動画をダウンロードし、それをHDMI経由でテレビの画面に流すものです。あの小さい筐体の中に何が入っているのか気になります。

パソコンでprime videoを視聴しようとするとContent Decryption Module (CDM)なるものをインストールされました。DRMのために使用されているようです。prime videoで利用されているのはWideVineという種類で、他にもPlayReadyというのが人気のCDMです。よってパソコンの代わりとして映像を受け取るFire TV Stickにもそういった復号モジュールが入っているのではないかと予想して、楽しそうだなと思いました。

これを操作するリモコンにはAmazon Alexaに対応した音声認識機能がついています。後述するように昨年Amazon Alexaスマートスピーカー(Echo)を使った開発をして知識が少しあるので、それとの違いにも気付けるかもしれません。スマートスピーカの分解も楽しそうです(https://vanderpot.com/Clinton_Cook_Paper.pdf )。https://www.amazon.co.jp/Fire-TV-Stick/dp/B01ETRGGYI#tech (技術仕様) によると、プロセッサはARMアーキテクチャのものを採用しているようです。詳しい型番は書かれていません。

問3: 以下の技術用語について解説してください。またどのようなところで使われているかも述べてください。

「UART」「JTAG」「SPI(Serial Peripheral Interface)」「I2C(I-squared-C)」

UART

Universal Asynchronous Receiver Transmitterという原語が示す通り、マイコン等と非同期通信をするための規格。データ転送速度はボーレートで示され、9600baudがよく用いられる。 一つのパケットに入るペイロードの長さは5〜9bitであり、その前後には送信の開始・終了を知らせるための特定のビットを付け加えるためデータ量は大きくなる。また誤り修正のためのパリティビットが付けられる場合もある。

端子は信号送出側のTXと受信側のRXのみであり、互いのTX端子を互いのRX端子に接続するので送信と受信は同時に行える。JTAGやSPIのように3つ以上で相互に通信するにはTX, RX端子をまた別途用意する必要がある。 たいていのマイコンではUARTやその同期通信バージョンであるUSARTが利用でき、センサ等と通信できるようになっている。また、外部からのデバッグや検査のために機器と通信できるように基盤にUARTポートを設ける場合も多く見られる。そういった機器の例としては家電製品やIPカメラが挙げられる。

JTAG

Joint Test Action Groupの略で、基盤の検査・デバッグに用いられる端子・検査方法(バウンダリスキャンテスト)の規格。半導体技術の進歩で基盤上の素子の密度が上がり、プローブを手で差して測定器(オシロスコープとか)を見て検査するやり方が難しくなったために作られた仕組み。端子にはTDI(Test Data In), TDO(Test Data Out), TCK(Test Clock), TMS(Test Mode Select)、オプションのTRST(Test Reset)がある。

もともとはバウンダリスキャンテストに用いられていた。バウンダリスキャンテストは基板上でICとICをつなぐ導線がショートしたりちぎれたりしていないか確かめるためのテストで、検査用のビット列を入力して、それに対応する出力を見ることで検査する。JTAGが普及する以前は導線を一部太くしてテスト用のランドを設けプローブで検査できるようにしていた(イン・サーキット検査)。代わりにJTAGではIC内部(入力・出力ピンと処理部分の間)にテスト用のセルを設けることで、ICの外の基盤の構成をよりシンプルにできるようになっている。また、単なるランドではなく回路としてのセル(プローブとランドを合わせたようなもの)を挿入することで、導線を横切るようにセル同士をつなげられる。さらにそれぞれのICでつなげたセルたちを(TAPコントローラのTDI/TDO端子を介して)デイジーチェーン接続することで機器全体の検査が少ない端子で行えるようになった。

ICごとに付けられるTAP(Test Access Point)コントローラはTMS端子からの入力によって「ステート」を切り替え、TDIから命令をIR(Instruction Register)に流し込むことで動作を切り替える。

DRにはBYPASSレジスタ, IDCODEレジスタ, バウンダリスキャンレジスタなどいくつか種類があり、IRの値に応じてどのDRを操作するか決定する。 IRに格納される命令は規格で定められているものもあれば、メーカが独自に拡張するものもある。

  • BYPASS命令はTDIから入力されたビットをBYPASSレジスタに入れてそのままTDOから出力する命令。1ビットのBYPASSレジスタに一度貯めることで1クロック出力を遅らせる効果があり、機器全体ではTAPコントローラの数だけクロックが遅れる。その遅れを観測することで機器内のTAPコントローラの数が合っているか確かめることができる。
  • SAMPLE命令とPRELOAD命令はバウンダリスキャンレジスタを通じてデバイスの入出力を取得し、同時にバウンダリスキャンレジスタにテストパターンを書き込むことができる。厳密にはこの2つは異なる命令だが、同じSAMPLE/PRELOAD命令として動作させることが推奨されている。
  • EXTEST命令はバウンダリスキャンレジスタの値をそれぞれのピンから出力する命令。また、その出力を入力として受け取る側でCapture, Shift, Update-DRステートに移行することで入力を取りだせ、テストパターンを比較することでバウンダリスキャンの結果を知ることができる。
  • 他にもINTEST, IDCODE, RUNBIST, CLAMP命令などがある。

ステートについて、

  • Shift-IRステートではTAPのIR(Instruction Register)にTDIから命令(メッセージ)を流し込むことができる。同様にShift-DRステートではDR(Data Register)にデータを流し込むことができる。
  • Capture-DRステートでは回路の情報を取得してDRに格納する。逆にUpdate-DRステートではDRの値を回路の別の場所に格納する。具体的にどのような情報を取得するかは命令に依存する。
  • Update-IRステートではIRに格納された命令を実行する。Capture-IRステートでは「ステータス」と呼ばれる値をIRに格納する。

JTAGでは先述したようにメーカ・モデルによってさまざまな拡張がなされている。拡張の一部を知るためにはメーカが提供するBSDLファイルを用いることができる。他にもARM製プロセッサに搭載されているCoresightというデバッグシステムや、JTAGの4本の導線を2本に減らして派生したSWDという規格があるようだが、JTAGとの関連はよくわからなかった。JTAG-ICE(In-Circuit Emulator)と呼ばれるデバッグ用の装置もあるが、単純にJTAGポートに接続してデバッグを行うこととの違いは不明である。

製品検査のために策定されたということもありUART同様さまざまな機器の基盤にデバッグ用のポートが設けられている。逆に、機器内で完結する通信(センサ-マイコン間など)については他のプロトコルがより用いられていると思われる。個人的には最も身近な例として先述した実家のルーターが挙げられる。この基盤のBSDLファイルは入手できなかった。

SPI

Serial Peripheral Interfaceの略で、機器に入っているICが他のICと通信するためのプロトコル。数Mbps程度で比較的高速に通信できる。 端子にはSCK(Serial Clock), MISO(Master In Slave Out), MOSI(Master Out Slave In), SS(Slave Select)がある。SCK(Serial Clock)があることからわかる通り、SPIはクロックで同期を取って通信する点が非同期通信のUARTと異なる。また、SPIでは接続されたICは1つのMasterと複数のSlaveに分けられる(Masterは多くの場合マイコン)。MISOはSlaveからMaster、MOSIはMasterからSlaveへの通信に利用する。SSは複数のSlaveのうちどれと通信するか選択するために用いるもので、通信したいSlaveとのSS出力だけを0にセットする(通信しない状態では常に1)。これらのためにUARTやI2Cよりも必要な接続線が多くなっている。

JTAGではTDIとTDOにデイジーチェーン接続を用いていたが、SPIのMasterとSlaveの接続はスター型をとることもできる。それぞれのSlaveと別々に通信したい場合はSSを分けMOSI, MISOをスター型に接続する。逆に複数のSlaveをまとめて一つと捉えたい場合はSSを一本にしてMOSI, MISOをそれぞれ前後に隣接するSlaveにデイジーチェーン接続することができる(MISO, MOSIのMaster側は必ずしもMasterそのものである必要はなく、Masterからの信号が間接的に渡されてくればよい)。この場合は1クロックずつずれてデータがSlave間で転送される。しかしながら、デイジーチェーン接続に対応していないデバイスも存在する。

またMaster側のSPIコントローラのレジスタを通じてCPOL(Clock Polarity)とCPHA(Clock Phase)を指定することで、アイドル時のクロック信号を1と0のどちらに固定するかやクロックの立ち上がり・立ち下がり時の処理を指定することができる。

Intelが拡張したeSPI(Enhanced SPI)という仕様も存在する。Alertという端子を追加して、SlaveからMasterにイベントを通知できるようになっている。

どちらかといえばセンサとマイコンマイコンとアクチュエータ間といった機器内の通信用に主に用いられている。

I2C

Inter-Integrated Circuitの略。SPI同様機器内の通信に用いられる。UARTと違って同期通信ではあるが、先頭と末尾に一定のパターンを加えてからメッセージ単位で送信する。 端子にはデータを送受信するためののSDAとクロックを供給するためのSCLがある。

UARTでは1対1の通信しか行えなかったが、I2Cではメッセージに宛先アドレスを含めることで多対多のネットワークを構築できるようになっている。SPIと同じくMaster・Slaveという区別を採用していて、通信はMasterから始める。Masterも複数接続できる。メッセージのRead/Writeビットを切り替えることで、MasterからデータをSlaveに投げるのか、それともSlaveからデータを送るよう要求するのか区別している。

メッセージには任意個のデータフレームを含めることができる。それぞれのデータフレームの長さは8ビットで固定である。データフレームを送信する前後で受け取り側は送信側にACK/NACKビットを返答する。ACK(Acknowledge)はTCPのそれと同じ意味で、データを正しく受け取った場合はACKとして1を、そうでない場合はNACKとして0を返す。

こちらは機器の基盤にポートが設けられている例は見つけられなかったが、温度センサなどでSPIを介して通信できるようになっているものは多数見受けられた。

参考文献

問4: 安全なファームウェアアップデートとは何ですか? もし、それができると攻撃者はどのような攻撃ができますか?事例などもご存知であれば合わせて紹介してください。

実はこの設問の意味が理解できていなくて(「それができると」のあたり)、全くトンチンカンなことを書いているかもしれませんが容赦ください。 安全なファームウェアアップデートを行うためには、ネットワークを経由してダウンロードしたファームウェアがベンダ正規のものであり、改ざんされていないか確認するため、アップデート時に署名を確認させるのが有効です。

バイス側の鍵は(使用するのであれば)専用のセキュリティチップ、TPM(Trusted Platform Module)やARMでいえばTrustZoneのような仕組みを活用して隔離した場所で管理すべきです。そのような鍵にはたとえばベンダの公開鍵そのものの正当性を確認するためのルート認証局の公開鍵や、共通鍵暗号を利用する場合はその共通鍵が考えられます。また鍵を別に用意してファームウェアそのものを暗号化するベンダもあります(Philips, Samsungのテレビなどがそうだったように思いますが、リンクを失くしました)。

これらの対策ができる場合でも、攻撃者はアップデートに関係しない部分からファームウェアを改ざんするなどして攻撃を加えることができます。基盤のデバッグポートを利用したりチップを取り外したりして、もしくはファームウェアそのものの脆弱性を突いて(スマートテレビのOSコマンドインジェクションがわかりやすい例)ファームウェアをダンプし、解析・改造して書き込み直すといった方法があります。

問5: 何か他にアピールしたいことがあれば、自由に書いてください。誤ったことを書いていても減点はしません。書いておきたいことはなんでも書いてください。

問1で述べたとおり、何かを分解するのはそれだけでも楽しいのですが、毎回その仕組みがよくわからないまま終わるので何か一つでもしっかり解析してみて流れ・コツを掴みたい、またseccampでしか学べない最新の技術に触れたいと思い応募しました。

昨年度の全国高専プログラミングコンテスト(高専プロコン)の課題部門に出場しました。私の学校のチームは「スマートコンシェルジュ」という民泊事業者と外国人宿泊者をスマートスピーカ(Amazon Alexa)を使いつなげるシステムを構築して出展しました。例えば家電の操作を宿泊者の母国語でできるようにしたり、近所の有名なスポットを教えてあげたりということができます。当日はブースを構えてデモを行う必要があったので、何らかの家電を見に来た人に声でライトの電源を操作してもらうことにしました。そのためにはコンセントからの電源入力を遮断・導通できるいわゆる「スマートプラグ」が必要になります。Amazonで普通に買っても良かったのですが、せっかくなのでいろいろと調べて自作しました。電源ケーブルの片側を切断したところにRaspberry Pi制御のリレーを差し込むという単純なものです。そうやって切ったり付けたりして何かを作るのはずっと好きですし、学校でもなぜか電気のことを学んでいるので(コンデンサ・共振・三相交流etc…)何かハードウェアにも活かせないだろうかと考えています。

以上です。よろしくお願いします。

前回応募時との比較

2年前の5月に応募して不合格だったときといろいろ比べてみました。スキル面でいえば、もともとWebとiOSメインだったのが、競プロやってAtCoder水色になったり(もう一年半近く参加してないけれど…)CTFの手で動かしていろいろ学んだり、それが転じてSecHack365に応募してコンパイラを改造したり、というレイヤが下がっていった感じです。結果的に知識を広く浅く身につけることになったと思います。選択問題のあるコースでは今のほうが選べる手札が多いはずです。何かに絞ってがんばろうというのは何度かやってみましたが飽きて続かなかったので諦めました。

SecHack365でお世話になったトレーナーさんにもキャンプ講師を務めている人が多いので、なんとなく書きやすかったような気はします。もっとも応募したゼミの講師はトレーナーではないので、本当になんとなくです。不思議ですね。

そして前回と違ってコース・ゼミ選択で迷う時間がほとんどなかったと思います。特に選択コースは幅が広いのでどれどれに行きたいな、ああこれとそれは被ってるなと考えてしまいがちです。Twitterでフォローしている人がゼミの講師をやるというのを知って空リプしたら是非応募してねとリプライが来たのでそこに決めてしまいました。もともとリバエンゼミは2年前のときも第1か第2候補でした。そのままストレートに用紙作成に移れたのはよかったかなあ。というか書いたり調べたりしている内にそれについてさらに興味が出てきました。

文体は変えました。前回ははじめから終わりまで真面目に書いていたように思います。今回もまあ誰が読むかわからないからきちんとした文章を書こうと思っていました。とはいえ設問の内容が「問題を解いてください」系ではなく「好きなだけ語ってください」系で、何かもう一つ書けることないかと繰り返し繰り返し探しているうちに内容そのものがよくわからないモノになってしまったのでブログのノリで書くことにしました(読んだ方はわかると思います)。

これも文章に関わる話ですが、熱意を伝えるとかそういうことは考えないようにしました。もしくは熱意≒文章量という近似式で捉えるようにしました。結局熱意ってなんだ、となって筆が進まなくなったからです。また、いろいろなタイプの人に会ったときに熱意を表現するのが上手な人とそうでない人といて、自分は後者じゃないかなあと思ったからです。もちろんその感覚が間違っている可能性も多いにあります。とりあえず書けることをわかりやすいように書きました。

アウトプットをしようというのはよくある話です。不合格になってから実際自分もCTFで解いた問題のwrite-upなどをブログやScrapboxにまとめるようにしていました。またこういった場で使うことを予想して部活での資料等もなるべくまとめて公開するようにしていました。普段から作業メモをScrapboxの一箇所にまとめるようにしていたのもかなり役立ちました(記事にしなくても箇条書きで残している思考過程やログ)。文章ベースのアウトプットは何かを「作るプログラミング」をしていない人にはなおさら必要な気がします(競プロとか)。また、自分で書いたプロダクトは未完成のもの小さいものが多くて説明を書くときにあまり自信を持てなかったのに対し、ブログの記事等は特に見返さないのでしょうもないものでもURL貼ってハイ終わりで済ませてしまえたのも用紙を仕上げるという観点からいえばよかったかもしれません。完成形のモノ作るのって大変ですよね…。設計や開発技法もそのうちどこかで勉強してみたいです。

どこかでseccampの選考は運ゲーだという話を見ました。自分より優秀なのに落ちてしまった人もいるかもしれません。選考に通ったら優秀、というのもなんだかプレッシャーを感じるのでなんだかなあと思います(いやプレッシャーも少しは感じたほうがいいのかもしれない)。このへんの議論もまた「優秀ってなんだ?」という話に流れるなどして上手い人に持ってかれそうなのでやめておきますが、確かに定員がもっと増えてくれればな〜とは思います。GCCアラブ諸国と一緒にやって石油王に賛助会員になってもらうとか…やっぱり難しいんですかね?


過去にはミニキャンプ(北陸)とジュニアキャンプ(高知)に参加していました。だいぶ前だと思います。ロボットカー動かしたりXSSしてみたりして楽しかったです。夕食で刺身のツマを食べようとしていたら店の人に持っていかれて残念がってたとき、隣に座っていたのはかの有名なバグハンターの方でした。夜の講話のときに「全国応募する人〜!」という質問があってほとんどの人が手を挙げているなか、「もうちょっと実力貯めてから行きたいな」と思って手を挙げなかったのを思い出します。数年で貯めた実力を発揮できるよう、そしてさらに伸ばせるよう手を動かしていきます〜〜〜