このブログは https://terassyi.net をリニューアルしたものです。

過去の記事はできる限りそのまま移行しています。 古いブログのリンクを踏んだ際はこちらのサイトにリダイレクトするようにしています。

ネットワークを作って理解しようとする(ARP編)

こんにちは. 新型コロナの影響で外出を控えているのですが,ずっと自宅にいるのも結構しんどいですね. この前見始めた鬼滅の刃ももう見終わってしまいました.続きが気になります. さて,今回もネットワークシリーズです.

ネットワークを作って理解する

ネットワークの仕組みを理解するためには作ってみるのが一番ということでプロトコルスタックを自作してみます. 前回はEthernetを実装してみました.前回のポストはこちら 今回はデータリンク層のアドレスとネットワーク層のアドレスを解決するARPを実装してみたいと思います.使用言語はgolangです.

[Read More]

ネットワークを作って理解しようとする(Ethernet編)

こんにちは. 今週末は新型コロナの影響で外出自粛なので暇を持て余しております. 暇なのでNetflixで鬼滅の刃を見始めました.面白いですね〜.

ネットワークを作って理解する

最近の興味としてネットワークの仕組みを理解したいというのがあり,プロトコルスタック自作なるものを知りました.とはいえ僕はC言語が得意でないのでGo言語で作ってみようと思い作成を始めました.というわけて何回かに分けて紹介したいと思います.

OSI参照モデル

OSI参照モデルとはコンピュータの通信機能を階層構造に分割したモデルです. 各階層にはそれぞれが担うべき機能が定義されています. データリンク層では隣接するノード間のデータの通信をサポートします. osi-model

開発環境

開発環境は以下の通りです.ioctlなどのシステムコールを扱うためprivilegeオプションを有効にしたLinuxコンテナを作成してプログラムをビルドします. また,実行はコンテナの中でネットワーク名前空間を分離して行います.

  • Mac OS Catalina
  • VSCode
  • Docker version 19.03.5, build 633a0ea

実装

リポジトリはこちら

物理層からデータを受け取る

今回のプログラムでは生のパケットを受け取る必要があります.golangの標準パッケージでは生のパケットを扱うことができないため別の方法で生のパケットを取得しなければいけません.そこで今回のプログラムでは以下の二つの方法で生のパケットを取得します.

  • PF_PACKET
  • Tun/Tapデバイス

PF_PACKET

PF_PACKETはLinuxのsocketシステムコールで生のパケットを扱うためのドメインです.syscallパッケージのSocket関数を用いて以下のようにソケットを開きます.

protocol := hton16(syscall.ETH_P_ALL)
fd, err := syscall.Socket(syscall.AF_PACKET, syscall.SOCK_RAW, int(protocol))
if err != nil {
    return -1, err
}

開いたソケットを用いてPFPacket構造体を定義します.

type PFPacket struct {
	fd                 int
	name               string
	address            ethernet.HardwareAddress
	netInfo            ip.IPSubnetMask
	registeredProtocol []LinkNetProtocol
	MTU                int
	buffer             chan *ethernet.EthernetFrame
}

Tun/Tap

Tun/TapはUnixで使用できる仮想ネットワークデバイスです.Tun/Tapデバイスに届いたパケットは直接ユーザープログラムに送られます. Tun/Tapデバイスは以下のように開きます.

const device = "/dev/net/tun"

file, err := os.OpenFile(device, os.O_RDWR, 0600)
	if err != nil {
		return "", nil, err
	}

開いたファイルを用いてTun構造体を定義します.

type Tun struct {
	file               io.ReadWriteCloser
	name               string
	address            ethernet.HardwareAddress
	netInfo            ip.IPSubnetMask
	registeredProtocol []LinkNetProtocol
	MTU                int
	buffer             chan *ethernet.EthernetFrame
}

Deviceインターフェース

DeviceインターフェースでPF_PACKETとTunデバイスの差を吸収します.

[Read More]

もろもろを移行する

もろもろを移行する

僕個人が運用しているもろもろを移行します.

移行するもの

  • ホームページ(これはほんとにひどい)
  • ブログ
  • twitterのID(名前変えただけ)
  • GithubのID(名前変えただけ)

動機

アウトプットの場としてブログを運用し始めたのですが,いざ記事を書こうとすると億劫になってなかなか手がすすみません. 原因は何かと考えた時にブログポストのために毎回WordpressのページにログインしたりMarkdownでかけないあたりだと思い立ちました. そこでブログをMarkdownで書ける静的サイトジェネレータに移行しようと思いました. ついでに最近しっくりきていなかったspectrex02というハンドルネームも移行しようと考えてもろもろを移行してしまいます. (spextrex02というハンドルネームは元々僕が自費で初めて購入したHPのPCの製品名が由来)

ホームページ

これはひどいのでなくしちゃいます.

ブログ

これまではWordpressをEC2上で動かしてました. カスタムドメインを使用するのでRoute53にドメイン登録してたんですが結構費用がかかるんですよね. かつWordpressだと記事書くのが結構めんどくさいのでMarkdownで書けるVuepressに移行します. ReactのGatsbyにしようかと考えましたがReact分からなくてしっくりこなかったのでVueを使用したVuepressにしました. テーマはvuepress-theme-meteorlxyを使用しています. ほとんど変わったことはしていないので導入は公式に従って進めました. 公開はGithub Pagesで行います.カスタムドメインやHTTPSにも対応してるしリポジトリのsettingページから簡単にできました.すごい.

その他アカウント

TwitterやGithubのアカウント名も合わせてspectrex02からterassyiに変更しました.

まとめ

ブログをvuepressに移行して爆速でポストできるようになった(はず)なのでこれから頑張りたいです. vuepressもGithub Pagesも簡単でめっちゃいいです.

ネットワークを作って理解しようとする(DHCP編)

今回はDHCPプロトコルをサーバーを実装することで理解してみます.使用する言語はRustです.普段はGoを書いていますが,新しい言語としてRustの勉強を始めたため学習のため選択しました.Rustはプログラミング言語Rustを一通り読んだだけで実際にプログラムを書いたことはほどんどありません.なので読みにくいです.ちなみにモチベ維持のため作りながら書いてます.

[Read More]
network  rust  dhcp 

今更2019年まとめ

ELEP

ELEPとは僕が所属する大学の留学プログラムの略称です。大学が春休みの2月から3月にかけてアメリカの西海岸へ5週間の短期留学をして、英語やプレゼンスキル、シリコンバレーの企業を多数訪問して起業家精神を養うというプログラムです。

サンノゼ州立大学の一室を借りてプレゼンのやり方について学びました。僕自身は人前に立って何かを発表するのが苦手だったのでいい訓練になったと思います。 平日は毎日学校ですが、休日は自由なので一緒にプログラムに参加している仲間とサンフランシスコやロサンゼルス、ヨセミテ国立公園などに行って過ごしました。また、Googleやapple、intelなどの本社を見学することもできました。 食生活が合うかということを心配していましたがホームステイのホストファミリーがインドからの移民の家族でベジタリアンだったのでむしろ日本より健康な食生活を過ごしました。帰国したら少し痩せてました。

英語は1ヶ月やそこらでは大した向上はしませんでした.ですが,英語に対する壁や恐怖感がなくなったかなと感じています.今年は英語の勉強を頑張りたいです.

留学中は毎週1回フィールドトリップで様々な企業のオフィスを訪問しました.IBMやLinkedinなどのアメリカ企業から楽天やSmartNewsなどの日本企業のサンフランシスコオフィスを見学し,各企業で様々な方からお話を聞くことができ,今後の自分のキャリアを考える上で参考になりました.

まとめ

新しい世界を知り、自分の将来に対して考えるきっかけとなったのがこの留学だったように思います。自発的にアクションを起こす重要さを感じました。 ぜひサンフランシスコにまた行きたいです。

研究室配属

大学4年になり、所属する研究室を決めなければなりませんでした。 以前は趣味の将棋と関連して機械学習や人工知能に興味があり本を読んでいたりしたのですが、セキュリティに興味もあり悩んでいました。 結局セキュリティ系の研究室を選んだのですが、きっかけはあまり覚えてないです。 アメリカでセキュリティエンジニアの方とお話しする機会があって魅力的だと感じたことは一つ要因としてあります。 結果として一年間様々な刺激と経験を得ることができていい選択をしたと思っています。

インターン

アメリカから帰国して、自分の将来、キャリアにプラスになることに挑戦しようと思い、まずインターンとして受け入れていただける企業を探しました。 最初に応募した某企業に落ちたころに現在受け入れていただいている企業から面接のお話をいただいて受け入れていただけることになりました。 これまでの実績など皆無だったので非常にありがたいお話でした。 初出勤が6月末ごろだったので半年ほど経ちましたが、非常に貴重な経験をさせていただいています。 勤務内容としてはwebアプリケーションAPIの開発を研修として行い、その後はインフラ周りを担当しています。2020年は戦力として貢献できるようになりたいです。がんばります。

セキュリティキャンプ

本番前

セキュリティキャンプは2019年で一番の事件でした。 まさか受かるとは思っていなかったので非常に驚きましたが、素晴らしい経験をさせていただきました。 応募のきっかけは教授の紹介です。 ある日昼ごろに研究室に行くと自席のディスプレイにチラシが貼ってありました。 どうせ受かるわけないと思っていましたが年齢的にラストチャンスだったこともあり応募することにしました。 応募課題を見ながら自分でも解けそうなコースの課題を探してなんとか解答欄を埋めて提出しました。 不合格だと思っていたので合格発表のメールもあまりみる気にならなかったのですが、なぜか僕の番号があったので嬉しかったのですが、なぜ?という気持ちが大きかったです。 受かったからにはしっかりしなければと思い、事前学習を完璧にしていこうと思って意気込んでいたのですが、後述する院試と時期が被っていたので時間の配分が難しく、なかなか思い通りにいかず悔いが残ります。

本番

僕はセキュリティ関わり始めて日も浅く、プログラミングスキルも高くないため最弱だという自信がありました。なので、僕にとってセキュリティキャンプは知識を深める場というよりは広くセキュリティ業界をみて、様々な分野の知識を得てこれから自分の進むべき方向を見定める場だという気持ちで臨みました。 なので、選択講義もできるだけ分野を絞らずに選択しました。講義はどれも興味深く、楽しかったです。 インターネットを作ったり、機械学習したり、XSSしたりしました。 得られたものとして非常に大きかったのは他の参加者の方や講師の方、チューターの方との交流です。いろいろなお話をできて楽しかったです。

まとめ

非常に貴重な経験をさせていただきました。チューターなどとして(できれば)恩返しできるようにレベルアップしたいですね。 Twitterに流れてくる呟きに刺激を受けながら強い人に追いつけるように頑張っています。

いんし

セキュリティキャンプの1週間後くらいにありました。無事合格し、2020年度の進路が決定したのでよかったです。勉強はめんどくさかったですけど、学び直しするいい機会だったかなとも思います。

Go Conference

10月に東京で開催されたGo Conferenceに学生スカラーシップ枠として参加させていただきました。受け入れてくださったmercariさんに非常に感謝しています。 応募したのが期限ギリギリだったので幸運でした。 Go言語を触り始めたのはセキュリティキャンプ前後だったので初心者同然でしたが、言語のコンセプトなど気に入っていたので知見を深めたいと考え参加しました。セッションはgoのGCについてやゲームボーイのエミュレータ開発、gofuzzなど多岐に渡りました。どのセッションも興味深く、goに対するモチベーションが上がりました。

LINE DEVELOPER DAY

11月に東京で開催されたLINE DEVELOPER DAYにこちらも学生枠として参加させていただきました。2日に渡るセッションやブース展示では、様々なLINEの取り組みやシステムの変遷などを知ることができました。徳丸本で有名な徳丸先生の講演も聞くことができました。一番衝撃を受けたのはLINEが運用しているプライベートクラウドについての講演で、SEv6を用いたネットワーク制御やフルスクラッチのロードバランサー開発についての講演でした。僕自身クラウドはよく触っていて、便利さを実感しているのですが、開発する側も非常に楽しそうだなと感じました。また、講演していただいた社員の方が20代前半のあまり年齢が変わらない方々ということにレベルの差を感じ悲しくなりました。強くなりたい。

SECCON

12月に東京で開催されたSECCONに卒論の実験を兼ね、補助スタッフとして参加してきました。スタッフの名札を渡されたため、終始影を薄くして過ごしました。なんとか実験は無事終了したのでよかったです。 実験以外の時間はワークショップのお手伝いやCTFの決勝大会を脇から眺めたり、ブースを回ったりして過ごしました。 様々な方とお話しする機会を得ることができて非常に有意義でした。 また、CTFの決勝に参加している方やワークショップで講演している方々に強い憧れを感じました。強くなりたい。

おわりに

2019年は非常に得られるものが多い刺激的な一年でした。新しい世界を知り、周りのレベルの高さや自分の能力のなさに軽く絶望しますが、負けずに少しずつ成長していきたいです。 2020年の目標はすでにいくつかあり、それらの達成に向けて頑張ります。2019年以上に成長できる一年にしたいものです。 余談ですが、最近ストレングスファインダーなる能力診断を受けて学習欲や向上志向はあるものの自己完結しがちだという診断結果を受けました。つまりアウトプットを疎かにしがちだ(その通り)と言われたので2020年は更新を頑張りたいですね。

今更ながら2019年を備忘録的にまとめました.2020年も頑張ります.

セキュリティ・ミニキャンプ in 福岡 2019 秋 に参加しました

概要

ミニキャンプとは?

ミニキャンプは、セキュリティキャンプ全国大会と同様にIPAが主催して開催されるセキュリティ人材発掘のための勉強会です。詳しい説明はIPAのサイトをご覧ください(詳しく知らない)。今回僕が参加したのは地元の福岡のミニキャンプです。

講義内容と全国大会との違い

ミニキャンプは2日間の日程で開催されます。また、宿泊施設の提供などもありません(地元勢なので関係ありませんが)。全国大会が5日間で泊まり込みというのがまず違いますね。とはいえ遠方から来ている参加者の方もいらっしゃったのでホテル探しなど大変そうでした。あと交通費も出ない感じでした。

講義など

今回のミニキャンプの講義は、

  • 情報セキュリティ技術の使い方をケースで考えよう (吉井 和明氏)
  • 自分でUSBオシロスコープを作ってみよう (竹迫 良範氏)
  • 基本から学ぶWebセキュリティ (越智 郁氏)
  • 脆弱性修正演習 (服部 祐一氏) という内容でどれも非常に興味深い講義でした。

最初は吉井先生の法律の講義でした。セキュリティキャンプの応募課題書いてるあたりからIT関連の法律を調べたり議論する機会が増えて昔よりすごくここら辺の法律に詳しくなった気がします。セキュリティをやる以上法律を理解する必要があるのでこのような機会を与えてもらえるのはすごくありがたいですね(自主的にやる気にはならない)。今回の講義はグループに分かれていくつかの事例について、その行為が違法かどうか、またそれがどのような点において法律に抵触しているのかなどを議論しました。また、攻撃を受けた際の対応の仕方についても学びました。インシデントレスポンスなんかも勉強しないと。

1日目後半の講義は竹迫先生によるUSBオシロスコープ作成の講義でした。内容としては配布されたUSBハブをドリルで穴を開けて導線をはんだ付けしてUSBの通信を傍受してsigrokというソフトでモニタリングするというものでした。はんだ付け中学校の技術の授業振りにしました笑笑。難しいですね、あれ。普段あまり触れないレイヤーに触れることができて楽しかったです。

2日目の講義はどちらもWebアプリケーションについての講義でした。前半はセキュアスカイ・テクノロジーの越智先生の講義でした。脆弱性のあるアプリケーションが公開され、それに対して攻撃を仕掛けたりBurpを使用して通信をみたりしました。個人的には一番楽しかったです。実はキャンプの直前にインターンでセキュアスカイさんにお邪魔して脆弱性診断についての講義を受けてました。なので他の参加者の方より少し講義内容を先取りしてましたが攻撃演習はいつでもたのしいです。

最後の講義は服部先生による脆弱性診断演習でした。この講義が一番大変だったと思います。防御する側の大変さだったり修正の難しさを実感することができました。攻撃の倍大変ですね、守るの。phpやらSQLもっと勉強しなければ。色々あり環境構築も大変でした

感想

初めてミニキャンプに参加して、僕はミニキャンプより先に全国大会に参加したのですが、講義は全国大会で受ける講義と同じくらいのクオリティと密度だったと思います。結構難易度も高く、とても勉強になりました。初心者なので。時間が短いので講師の方も内容を推敲したりとても大変なのだろうなと思いました。感謝です。今回は地元福岡の開催ということでとりあえず行ってみようという感じで参加したのですが、参加して、他の地域のミニキャンプにも参加してみたいなと思いました。そしていつかはチューターなどでも参加してセキュリティキャンプに貢献したいですね。

全国大会へ参加したい人やセキュリティキャンプの雰囲気を感じてみたい人にはぜひミニキャンプに参加してほしいと思います。各地で開催されているのでぜひ応募してセキュリティキャンプの雰囲気を味わってください。モチベもあがります。

最後に、初日遅刻して申し訳ありませんでした。うちの大学が共催で先生も会場にいらっしゃったのでやらかしました。(Mac book にUSB type-cしかないのが悪い)

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

終了して3週間ほど経ってしまいましたが、遅ればせながら参加記を書きます。キャンプは8/13~8/17で開催されたのですが、終了後バタバタしていたため参加記を書くに書けず今になってしまいました。ここまで遅れてしまうと他の参加者の皆さんが書き尽くしていると思うので手短に報告したいと思います。

[Read More]