読者です 読者をやめる 読者になる 読者になる

Packets are too Fast

slankdevの報告

BccとBPFでTracing

Packetとはなんなのかを理解するためにBPFをかじり始めたら どつぼにハマってしまい、とりあえずどんなことができるのかを 簡単なスクリプトを書いて試した.

目次

  • bpfで関数callをhookする
  • bpfで関数callの引数をtraceする
  • bpfで関数呼び出しの回数を取り出す

本記事で行う作業の一般的な手順を以下に示す

  1. BccでBPF Bytecodeを生成する
  2. hook pointにBytecodeを設定する

今回はiovisor/bccを用いてtracingを行った。

bpfで関数callをhookする

以下のslankdev_test関数の呼び出しをhookしてtracesする。

gist.github.com

実行結果を以下に示す

bpfで関数callの引数をtrace

gist.github.com

bpfで関数呼び出しの回数を取り出す

gist.github.com

bpf validationについて

bpfコンパイル時に実行ファイルが無限ループでない、とか不正アクセスしていない、とかをチェックしていいるのだが、 それがいまいちどの程度作業をしているのかがまだ明確でない。ドキュメントとかをみればしっかり書いてあるのだろうが、 今後しらべておきたい。

Slankdevなりのセキュリティ・キャンプの選考に通過するためのベストプラクティス

私は2015年のセキュリティキャンプの修了生で、2016年はチューターを担当しました。

セキュリティ・キャンプに通過するために何をすれば良いのか、というのを 私なりに簡単に考えました。

このリンク から申し込みができます。

もちろん、私個人の見解なので、所属する団体やセキュリティ・キャンプの 運営には一切関係がございません。ですが、私は以下に示すようなことが できる人材が セキュリティ・キャンプの選考を通過し、その後も成長しているような 気がします。 (もちろん私が尊敬する方もそうです)

ながくすると読みたくなくなるので、短くまとめました。

ぐちぐち言っていないで手を動かす

「まずは勉強してからそれから手を動かそうとおもいます」 というひとがいるのですが、私はそうは思いません。 「手を動かして、やっと勉強の仕方がわかる」というのが真実だと思います. めそめそしていてはおじいちゃんになってしまうので、どうせなら思い切って、 手を動かしてみましょう。楽しいことに気づくはずです。それから「もっとむずかしい、 奥が深い、もっと楽しい」というのに気づきます。キャンプの講師やチューターや 修了生はそれが楽しくてコンピュータをやっています。

やってみたけど、出来ない!!!!

じゃあ、どこまでやって出来なかったかをアウトプットしましょう。 キャンプの選考は問題の正解を重要視していません。問題に対してどのように アプローチして、どれだけたくさんチャレンジしたかをより重視しています。

  1. やれば、できるはずだ. でも面倒くさい.. -> これはダメです!!!
  2. やってみたけど、できない -> どこまでチャレンジしたかをしっかり整理しましょう
  3. できた -> すごい!! なんでできたか、ほかにはどんな考えがあるかを整理しましょう
  4. 余裕 -> こんなブログみてないで社会貢献してください!!

で、諦めてはいけません。自分のできる限り、たくさん考えて、 なんでも試してみましょう。そうすればいつかはできるはずです。

わからないからといって諦めない

世の中のほとんどのことが簡単にはうまくいかないことだと思います。 20年とちょっとしか生きていない僕がそうおもうので、年を重ねればもっと 実感するかもしれません。

キャンプの選考の問題も難しい問題がたくさんあります。 大事なことは問題の 正誤ではない。ようはどれだけその問題を解くために頑張ったか。 ということをしっかりと頭に叩き込んでください。

納得行かないことは試して納得

以前、@liva_jy氏(2017講師)から「ある定理や証明を考えるときに、それを他の モデルにも当てはめて試してみることが大事です!!」とアドバイスをいただきました. (こんなニュアンスだったと思います)

これはとても大事なことだと感じていて、何に対してもあてはめることができると 思います。(liva氏しゅごい)

満身せず、より深い理解をもとめて、いろいろと試すことが大事です。 トラブルがおきたとき、試行錯誤すればなおりますよね? じゃあ解決できたら、なぜ解決出来たか。をよく考えてください。

問題が難しすぎて本当にわけわかめな人

普通です。僕はそうでした。いまでもまだ完答できないかもしれません。 だから、これを機会に0から勉強を始めましょう。セキュリティ・キャンプは そういう人を歓迎します。

選考に通過できたら…

すごいです。でもそれはまだスタート地点。これからより一層楽しい生活が 待っています。同世代のプロの刺激をうけることになるでしょう。 中には「すごすぎて、どれくらいすごいか、よくわからん。。。」なんて人も います。でもセキュリティ・キャンプを起爆剤としてあなたもそのような 人になれるはずです。(私でもなれると信じています。)

最後にヒント

行き詰まったら,Googleで「セキュリティ・キャンプ 選考」と検索してみましょう。 これまでの先輩がどれだけ苦しんだかがわかります。 間違いだってたくさんあるはずです。でもみんなしっかり成長してプロになっています。

サイボウズ・ラボユース 第6期

2016/2/1から1年間、サイボウズ・ラボユースという制度で研究開発の支援を受けていた. 一年間、本当に強力なサポートをしていただき、我ながら圧倒的に成長した気がするので、 他の人にもぜひ体験していただきたく、ラボユースの紹介と報告をしようと思う。 ラボユースでは高性能なネットワークスタックの開発を行い、10GbE環境でLinuxよりPingの応答が 2倍早いネットワークスタックが出来上がった。

以下は成果報告会の発表資料である。

https://www.slideshare.net/mobile/slankdev/dpdk-74027268

サイボウズラボユースとは

http://labs.cybozu.co.jp/youth.html:tittle

引用: サイボウズ・ラボユースは、世界に通用する日本の若手エンジニアの発掘と育成を 目指すことを目的とし、学生の若手クリエイターに研究開発の機会を提供する(以下省略)

続きを読む

DPDKでremote_core_launchした処理が例外を投げた時の挙動について

上記について実際に動かして調べました。

パターン1: remote_core_launchをtryに囲む 

void func() /* user implementation */
{
    throw exception;
}

int main() /* developer implementation */
{
    dpdk_init();
    try {
        remote_core_launch(func);
    } catch (e) {
        printf(e.what());
    }
}
続きを読む

osc北海道参加記録

前回のオープンソースカンファレンス2016東京に続き、先日北海道で行われたオープンソース カンファレンス2016北海道にも参加させていただきました。 いつも通り「国立セキュリティ・キャンプ同窓会」というコミュニティで参加をさせていただき、 セキュリティキャンプ修了生の成果報告という形で展示とセミナーをさせていただきました。 前回はるくすさん(@rkx1209)に協力を仰ぎ、手伝っていただいたのですが、今回のセミナーは 私単身で心細いながらもパケット解析手法についてのお話をさせていただきました。 後述いたしますが、展示も前回と同じようにcpawctfの宣伝をさせていただいています。 今回は開発中の新フロントエンドの試作を展示させていただきました!

続きを読む

セキュリティ・ミニキャンプin四国高松 チューター

IPA主催のセキュリティ・キャンプの地方大会であるセキュリティ・ミニキャンプ in 四国高松で チューターとして参加させていただきました。

セキュリティ・ミニキャンプin四国

今回はもりたこ君(@mrtc0)と一緒にチューター業務をさせていただきました。こういうのにチューターとして 参加したのは初めてで、いつも以上にもりたこ君にはご迷惑をおかけしてしまいました。いつもごめんなさい。

今回はHTTPプロキシの講義と光ファイバの盗聴の講義でした。プロキシの講義は昨年のキャンプでは 受講していなかったので、僕自身とても勉強になりました。光ファイバ盗聴の講義は昨年に受講していて とてもいい思い出だったので前回講義を受けた後に感じた疑問や、微妙だったことなどもたくさん 聞けたのでよかったです。

続きを読む

DPDKとLinuxカーネルでパケット処理のレイテンシ比較

DPDKを使って開発をするのですが、どれだけ早いのか一応自分で測ってまとめてみました。 今回はrdtscを使ってレイテンシ計測を行います。ただ、DPDKの通信速度を計るだけでなく、 Linuxカーネルで同様の通信をした時の速度と比較をします。

続きを読む