拾い物のコンパス

まともに書いたメモ

xinetdが動作しないときの対処

概要

xinetdでサービスを動かしたら接続は上手くいくが、プログラムからの出力が返ってこなかった。この時に試したことを書き残す。
最終的にはxinetdの公式レポジトリからソースを引っ張ってきてインストールしたら正常に動作した。
他にはonly_fromの記述に注意すれば上手く行くことがわかった.
尚、この現象は32ビット版でのみ起こった. 64ビット版では今回の問題は起こらなかった.

環境

Ubuntu 14.04 LTS 32bit Arch Linux 64bit

設定ファイル

# xinetd.conf
service unlisted
{
    type        = UNLISTED
    socket_type = stream
    protocol    = tcp
    wait        = no
    only_from   = localhost 192.168.0.0/16
    port        = 20020
    server      = /bin/echo
    server_args = hogehogehogehoge                                
}

サーバを立てた状態で $ nc localhost 20020 を実行すれば hogehogehogehoge と表示される。

実行コマンド

$ sudo xinetd -f xinetd.conf -d

試したこと

  • 再インストール
    apt-get remove xinetd && apt-get install xinetd
  • デーモンのリスタート
    $ service xinetd restart
  • 再起動
    $ reboot
  • アップデート・アップグレード
    $ apt-get update; apt-get upgrade どれも効果なし。

対処

その1

ソースを取ってきてインストールする。

$ git clone https://github.com/xinetd-org/xinetd.git
$ cd xinetd
$ ./configure
$ make
$ make install

/usr/local/sbin/にインストールされる。
これでちゃんと動いた。

その2

$ ip address show
で自分のIPを調べる.xintd.confonly_fromで接続を192.168.0.0/24に制限しているから,自分のIPが外れていたら適宜修正すること.
$ nc <your_IP> 20020

その3

以下を編集する.

[-] only_from   = localhost 192.168.0.0/16
[+] only_from   = 127.0.0.1 192.168.0.0/16

only_fromの記述にlocalhostは使わないほうがいいようだ.
これならば nc localhost/127.0.0.1/192.168.?.? 20020 どのIPでも上手く行った.
ちなみに,xnetd実行時にsudoを忘れるとどのIPでも出力が返ってこなかった.

まとめ

  • xinetd実行時にはsudoをつけよう
  • xinetd.confファイルのonly_fromではlocalhostは使わない

以上.

セキュリティキャンプ九州 Writeup

概要

8/28-8/30にかけてセキュリティ・キャンプ実施協議会主催(実はIPA主催じゃないらしい)のセキュリティキャンプ九州に参加した。感想や反省点をここに書き残す。

キャンプ内容

応募

セキュリティキャンプには前々から興味があったので、技術力に自信はなかったが当たって砕けたら縁がなかったと諦める覚悟で応募した。 質問には正直に答えた。質問3のネットワーク・サーバの経験はなかったので、夢見ていることをつらつら書いた覚えがある。
質問4のアピールは他人と比較してではなく、とりあえず自分ができることを書いた。何か書かないと顔も知らない相手には何も伝わらない。
恐らく、一番重要であろう学んだ知識の使い道は今までいろんな技術を公開してくれた人への恩返しがしたいとかいう内容を書いたと思う。
もし応募しようか悩んでいたら、まずカレンダーを見ること。そして暇だったら応募することをお勧めする。キャンプ中は生活習慣が矯正される副作用が魅力。

当日まで

演習で利用する環境の構築やシンプルなパケットの解析、XSSの練習をやった。
講師おすすめのWebサイトや本は知識不足で読んでも理解できず、碌に読まないままキャンプに突入した。この選択が二日目にとても効いた。

一日目

まず会場についてやったことは設営の準備だった。この過程で参加者同士の緊張がいい感じにほぐれて会話がちらほら聞こえるようになった。
参加者の一人が背中に "GitHub" とプリントされたTシャツを着ているのを見て、ここはセキュリティキャンプなんだと強く感じた。
午前中は悪質なアプリの仕組みやサイバー犯罪についての講演があった。スマホのキャッシュ機能を利用して再起動時にも悪質なサイトへアクセスする仕組みには思わず唸った。
サイバーセキュリティはいくら投資しても儲からないから力を入れる経営者は少ないという話は理解はできるが納得はできなかった。危ない橋を渡り続ければいつかは落ちてしまうと思う。

午後は待ちに待った実習。
サイバー大学の園田教授が講師で強いパスワードの作り方を議論し、パケット解析をした。
複雑なパスワードの作り方を提唱するのは簡単だが、高齢者に使えるかどうかと聞かれるとNoだった。
良心的で記憶力の高い孫に頑張ってもらうか、サイバー高齢者を育成するのが早そうだ。サイバーじーちゃんって響きがいいな。
パケット解析では本物のウイルスが入ったパケットを配られ、対策ソフトが検知・削除する現象が流行。初めて対策ソフトの検知方法について考えた。対策ソフトの反応を見る限りだと検知された理由がシグネチャマッチによるものみたいだったから、例外登録以外にも圧縮によるコピーも成功した。
どうやら有名なバスターさんは解凍したときに生成されたファイルをすべて自動スキャンして削除するようだ。潜在的な持込み自体は成功してしまうことになる。ウイルスを作るウイルスはここに付け込んでいるんだろうな。
時間が足りず、パケットを全部解析し切れなかった。

夜は講師の部屋に行って講師やチューターの方と話した。講師の一人から情報を発信する・人との輪を広げていくことの重要性を聞き、ブログを開設しようと決めた。

二日目

午前中はスライドを見ながらFuelPHPで簡単な掲示板を作成した。普段はバイナリ関係を主にいじっているから、やっていることがハイレベルなのは感じたが、内容が理解できなくて申し訳なかった。VimPHPのインデントが正常に機能せず、編集に苦戦した。インデントのパターンマッチは要改良。

午後は午前に作ったサイトで脆弱性探しの練習をした後、講師の作成したサイトで本番を行った。 おかしな挙動を見つけ、その悪用できるのかまでを考えるのが脆弱性解析なんだと実感した。この感覚は磨いていきたい。
チューターの人はツールを使いこなし、バリバリ見つけていて格好良かった。

午後5時を過ぎ、頭がSQLiとPHPでコアダンプしていたところに模擬裁判があった。
判決対象はどちらも致命的なミスがあり、つい両成敗したくなる事例だった。現実の事件もこのように白黒で裁けるものではないのだろう。
私は裁判官のグループだったため、「異議あり」と叫べなかった。とても残念。

晩飯はキャンプ史上初らしい焼肉に行った。他のキャンプ参加者から非難が殺到していたとは後で聞いた。
たまたま講師3人に囲まれた席に座り、前々から気になっていたことを質問したら丁寧に答えてくれた。有難い。
その場で講師の一人からセキュリティ業界には独身が多いという都市伝説を聞いた。セキュリティ人材の10大脅威があったらランクインしてしまいそうだから早くパッチを充てたほうがいいと思う。

三日目

午前中はRaspiを使ってARMのアセンブラを書いた。指定した番号のシステムコールを呼び出すコードを書いたが、シェルコードまで昇華することができなかった。RaspiではKali Linuxも動くらしいので、Linuxの実験用に一つ買いたいと思う。
午後はフレッドボードを使った工作。LEDを光らせたり、スイッチを有効にしたりした。LED端子を逆に刺していたことに気付かず困った。このような小さなデバイスではやはりCが強いなと思う。POSIXではPythonPerlを指定しているから、これらでもいいのだろう。
講座後は卒業証の授与があってからキャンプは終わった。

まとめ

演習会場はネット環境が用意されておらず、Google封じをくらった。やはり必要な知識は一度調べたら頭に叩き込むのが正解だと思う。ネットが無いとなにもできない技術者にならないためにも。

全体を通して講座の内容は知識を掘り下げるというよりはすべて入門という立ち位置だったと感じた。キャンプは知識と人との出会いを提供する場であり、そこから自分でどれほど掘り下げることができるのかが今後の成長につながると思う。精進したい。

おまけ

キャンプでは首や腰など、体に脆弱性を抱えると非常につらいということも学んだ。セグフォを起こさないようセキュアな生活と体作りを心掛けたい。
まずは重い荷物を持つときはちゃんと膝をついて持ち上げるところから始めたいと思う。