KazuminEngine

プログラマーの日記

snortをちょっと読んでみた

snortは基本idsである。inlineモードにすれば、ipsになるらしい。

main

detect.cにSnortMainがある。<-なかなか見つからなかった。

main https://github.com/threatstream/snort/blob/9bd7ba3c50f18b1d9df326182aed524324ed19f4/src/snort.c#L782

検知部分

検知するコードはdetectで検索すればよい。detect.h/cがもろにヒットした。 以下が、detection moduleらしい。

int CheckBidirectional(Packet *, struct _RuleTreeNode *, RuleFpList *, int);
int CheckSrcIP(Packet *, struct _RuleTreeNode *, RuleFpList *, int);
int CheckDstIP(Packet *, struct _RuleTreeNode *, RuleFpList *, int);
int CheckSrcIPNotEq(Packet *, struct _RuleTreeNode *, RuleFpList *, int);
int CheckDstIPNotEq(Packet *, struct _RuleTreeNode *, RuleFpList *, int);
int CheckSrcPortEqual(Packet *, struct _RuleTreeNode *, RuleFpList *, int);
int CheckDstPortEqual(Packet *, struct _RuleTreeNode *, RuleFpList *, int);
int CheckSrcPortNotEq(Packet *, struct _RuleTreeNode *, RuleFpList *, int);
int CheckDstPortNotEq(Packet *, struct _RuleTreeNode *, RuleFpList *, int);

drop部分

dropを検索すればよく。detect.cにDropActionがある。こいつが、検知した時に、dropをする処理だ。ただし、先述の通りインラインモードである必要がある。

int DropAction(Packet * p, OptTreeNode * otn, Event *event)
{
    RuleTreeNode *rtn = getRuntimeRtnFromOtn(otn);

    DEBUG_WRAP(DebugMessage(DEBUG_DETECT,
               "         Generating Alert and dropping! \"%s\"\n",
               otn->sigInfo.message););

    if(stream_api && !stream_api->alert_inline_midstream_drops())
    {
        if(stream_api->get_session_flags(p->ssnptr) & SSNFLAG_MIDSTREAM)
        {
            DEBUG_WRAP(DebugMessage(DEBUG_DETECT,
                "  Alert Came From Midstream Session Silently Drop! "
                "\"%s\"\n", otn->sigInfo.message););

            Active_DropSession(p);
            return 1;
        }
    }

    /*
    **  Set packet flag so output plugins will know we dropped the
    **  packet we just logged.
    */
    Active_DropSession(p);

    CallAlertFuncs(p, otn->sigInfo.message, rtn->listhead, event);

    CallLogFuncs(p, otn->sigInfo.message, rtn->listhead, event);

    return 1;
}

次は、もっと詳細に読んでいきたい。

consul 触ってみた その1

grasysのvuls記事を見ていて、consulがわからなかったので、さわって見た。 ( 前にも触ったことがあり、その時は、clusterを組んで遊んでいた。

何やったの?

consulは色々機能があるが、以下のうちKV DataとWeb UIを触って見た。 インストールは、簡単にバイナリをpcに落としてきて、./consoleで使ってた。

  • Consul Cluster

  • Health Checks

  • KV Data

  • Web UI

  • dns

詳しく

まず、agentを起動。 そのときにwebも起動してくれる。なので、http://localhost:8500を見に行けば、webからデータベースを触れる。 いくつかを実際に登録して見ました。

./consul agent -dev

redisに5を結びつける。

./consul kv put redis 5

redisに結びついた、valueを持ってくる。これで,5が出てくる。意外と、かなり簡単。

./consul kv get  redis

ext2 fsの開発を再開。

GitHub - Ninals-GitHub/Learning-Ext2-Filesystem: You can learn about ext2 filesystem step by step.

を参考にして、開発再開。

久しぶりに、makeすると

/home/vagrant/ext2/me2fs_super.h:49:1: error: expected ‘;’, identifier or ‘(’ before ‘struct’
 struct dentry *
 ^
/home/vagrant/ext2/me2fs_super.h:50:1: error: field ‘me2fsMountBlockDev’ declared as a function
 me2fsMountBlockDev( struct file_system_type *fs_type,
 ^
/home/vagrant/ext2/me2fs_main.c:22:1: error: expected specifier-qualifier-list before ‘static’
 static struct file_system_type me2fs_fstype =
 ^

と怒ってきた。

staticの前に何かつけろとか意味のわからないことばかりを......

放置してたので、そうなる予測はしていたが、まさかこれ2時間も時間を取られるとは。。。。

sudoつければよかったようです。

セキュリティキャンプ全国大会応募用紙との格闘まとめ

応過去問を解析

募用紙の書き方ノウハウを研究するために、過去問スプレッドを作成して、収集した。

docs.google.com

自分を励ますフレンズ

www.youtube.com

参加者日記 t.co

IoTセキュリティウィークin沖縄2016~ハッキング デー(1日目)に参加しました

こんにちは ひたすら人と違うことをする天邪鬼なかずみんです。

「イベントで学んだことなどは、明文化していくといい」と聞いたので、書いていきます。

今回はこちらに参加しました。

http://ccds.or.jp/event/2016/20161201/20161201.html

参加動機

セキュリティミニキャンプ2016の事前学習になると思ったので、参加しました。(特に、CAN busを用いた演習) また、デモが複数あるとゆうことだったので、「イベントでしか得られないものがあるのでは?」と思ったのでいきました。

セッションのまとめ

全体的にまとめていきます。 CCDSの取り組みを各分野についての発表が15分のが数回あった感じです。15分なので、そんなに深くは踏み込んでないです。会社紹介・ツール紹介・仕事の実行フェーズ・研究内容などの紹介がなされてました。ちょっと、書くのが面倒なので、詳細は割愛しますね。詳しくは、CCDSの公式ホームページなどに書かれています。

参加してみての感想

「イベントの影響力は凄いなー」と思いました。 やっぱり、オンライン配布されている資料を見るより、イベントに行くと、モチベーションに繋がるのでいいですね。早速、BadUSBでも作ってみます。

シスカンでのモチベーション上がったので、行ってよかったです。

CAN busも何となくわかったので、良しとします。

さて、2日目も行って来ます。「iotとセキュリティの未来(シンポジウム)」についての話のようです。楽しみです。

systemdの隠れたログを見よう

前置き

こんにちは、久しぶりのかずみんです。 あんまり書くことなかったので、書いてませんでした w

今回、私の都合により、日本語を適当にやっていきますw ところどころ日本語が思いつかないw

何やるの?

systemdで具体的なエラー内容を見つけるTipsを紹介します。 念のために言っておきますが、必ず見つかるわけではないですw

しかし、低レイヤーのlogを見たり、エスパーして、問題解決するよりもマシ?だと思います。

適当に教える

unitファイルのExecStartをsystemctlを介さずに叩くのです。 環境変数が使用されている場合は、設定ファイルへ探しに出かけましょう。

もうちょっと具体的に

fail2ban起動時に実際にエラーを起こして、エラー退治に行きましょう。 すみませんが、fail2banの説明とインストール手順は、割愛します。 ちなみに、筆者は、fail2banを本番導入してますが、こだわりは特にないですw

fail2ban:http://www.fail2ban.org/wiki/index.php/Main_Page

はい、スタート。 はい。こんな感じでエラー経験しますよね。はい。

$ systemctl start fail2ban
Job for fail2ban.service failed because the control process exited with error code. See "systemctl status fail2ban.service" and "journalctl -xe" for details.

で、指示通り。エラーを見ます。はい。

journalctl -ex  
Aug 30 23:02:32 host[1]: fail2ban.service failed.
Aug 30 23:02:32 host[1]: fail2ban.service holdoff time over, scheduling restart.
Aug 30 23:02:32 host[1]: start request repeated too quickly for fail2ban.service
Aug 30 23:02:32 host[1]: Failed to start Fail2Ban Service.
$ systemctl status 
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: fail2ban.service holdoff time over, scheduling restart.
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: start request repeated too quickly for fail2ban.service
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: Failed to start Fail2Ban Service.
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: Unit fail2ban.service entered failed state.
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: fail2ban.service failed.

いや。でも。でも。エラー内容が抽象的すぎw

それから、

tail -f  /var/log/fail2ban.log 

とかやると思いますが、これでもわかりません。

そんなわけで、unitファイルに行きましょう!

$ systemctl cat fail2ban
# /usr/lib/systemd/system/fail2ban.service
[Unit]
Description=Fail2Ban Service
Documentation=man:fail2ban(1)
After=network.target iptables.service firewalld.service firewalld.service

[Service]
Type=forking
ExecStart=/usr/bin/fail2ban-client -x start
ExecStop=/usr/bin/fail2ban-client stop
ExecReload=/usr/bin/fail2ban-client reload
PIDFile=/var/run/fail2ban/fail2ban.pid
Restart=always

[Install]
WantedBy=multi-user.target

よっしゃ、環境変数がない!:) ExecStartを実行ですよ。うん。こうゆう感じです。

$ /usr/bin/fail2ban-client -x start
ERROR  Failed during configuration: File contains no section headers.
file: /etc/fail2ban/jail.d/jail.local, line: 27
'enabled = true  

来た!最高ですね!/etc/fail2ban/jail.d/jail.localの27行目がおかしいそうです。

ちょっと、はしょりますが、

これで、無事、直りました。 そんなわけで、めでたしめでたし!

最後に

もっと頭の切れたやり方が、あればコメントでもしてもらえると幸いです。 某大学の情報学科でもapacheのエラー箇所が分からないなどの話が横行しています。 そんな時、お勧めではないでしょうか?