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

SLP Advent Calender 2014 15日目

SLP ADvent Calender2014 15日目の記事です。

去年はなんちゃらprogressの問題をRubyで解いたという記事を書きました。

さて、今年のネタですが、当初はzsh,emacs,vimみたいな細かい設定ができるツールの設定ファイルを晒して どう使ってるかの説明をしよう…と…思ってたのですが、いざ説明つけるとなると結構面倒くさい とか 使ってない設定がかなり残ってる とか いろいろな理由から諦めて、便利だと思って、最近導入したツールの紹介をします。

direnv

https://github.com/zimbatm/direnv

環境変数の切り替えなどをディレクトリ毎に設定でき、cdしたら勝手に設定をロードしてくれる。 また、他のディレクトリへcdすると勝手に設定が削除される。 自分は基本的にrails書いてる時に使う。ディレクトリでdirenv edit . とすると、エディタが起動するので

layout ruby

を追加する。

  • BUNDLE_BIN=$PWD/.direnv/bin
  • GEM_HOME=$PWD/.direnv/ruby
  • PATH=$BUNDLE_BIN:$PATH

となって、インストールしたgemにPATHが通るので、毎回毎回bundle execを打つ必要がなくなる。 あと、bundle install --path hogehoge みたいにpath指定もしなくていい。

また、パスワードの設定などgitの管理から外すために環境変数を使ってる場合にも役立つ。 direnv edit . で開いたファイルの内容として、シェルスクリプトに書くようにexportすればいい。

peco

https://github.com/peco/peco

使ったことがなければgithubに素晴らしいデモがあるので見てみるのがおすすめ。 簡単に説目すると、emacsでいうanything,helmのように複数の候補から選択したものをどうこうするっていうことを シェル上で実現してくれるツール。 zawを使ってたけどpecoの方が機能が豊富で汎用的に使えるので徐々に移行中。

$ ls | peco

とかすると、カレントディレクトリ上のファイルやディレクトリが候補として表示され、 どれかを選んで確定すると、選ばれた候補が標準出力に表示される。 zshwidgetとして関数を定義してあげると色々便利に使える。

ghq

https://github.com/motemen/ghq

gitリポジトリの管理ができるツール。cloneするときにgit cloneの代わりにghq getすると、ghqの管理下にcloneしてくれる。 ghq listとかすると管理しているリポジトリの一覧が見れる。 pecoと合わせて使うと、gitリポジトリへの移動がすごく簡単になる。http://qiita.com/ysk_1031/items/8cde9ce8b4d0870a129d

おまけ 気になってるツール

tmsu

http://tmsu.org/

ファイルやディレクトリをタグ付けして管理するものらしい。 前々からプロジェクトごとにタグ付けとかできれば便利そうと思ってたので、使ってみたい。

rails springが原因で Permission denied エラーになる問題の解決策

複数人、同一サーバ上で開発していて、次のようなエラーに遭遇しました。

vendor/bundler/ruby/2.1.0/gems/spring-1.1.2/lib/spring/server.rb:22:in `initialize': Permission denied @ rb_sysopen - /tmp/spring/ef358a68d26b97c11459c4a366e67b74.pid (Errno::EACCES)

Springサーバのpidファイルがユーザごととかではなく1プロジェクトにつき1つ、/tmp/spring/下に作られるのが原因になってるぽい…?

解決策

/tmpの下に作られると面倒なので、それぞれのユーザのプロジェクトごとに作ってもらおうということで…

#{Rails.root}/bin/spring の先頭に以下を追加

module Spring
  class Env
    def pidfile_path
      "#{Rails.root}/tmp/spring/#{application_id}.pid"
    end
  end
end

これで解決しました。

seccon2013 ctf オンライン予選 write up

大学の先輩のお誘いで、SECCONに参加していました。

チーム: Aquarium
スコア: 2802
順位: 19


ネットワーク・Web 200点問題の Find the key! についてのwriteupです。(他の問題は、先輩が解かれてるので…先輩のwriteupはこちら)

pcapファイルなので、とりあえずwiresharkで開く。

pingの通信で埋まっている。ProtocolHierarchyを見てもicmp通信が100%

lengthを見ると不自然に大きな箇所が見つかる。

中身を見てみると…

HTTP通信らしき文字が見える…。pingトンネルかー。
GET /kagi.png とかが見える。この画像にフラグがあるだろうと予想する。
PNGファイルを送っていそうな通信を見つけて、icmpのデータ領域だけ1つ1つエクスポート。(この辺り全部のパケットに対して一括でできる方法が見つからなかった…)。

この状態ではまだTCPヘッダなどの余計な情報が乗っているはずなのでそのあたりのゴミを除去する。
テキトーなpngファイルを拾ってきてヘッダ部分を調べる。
このヘッダ部分までが通信に使われているデータなので、この部分をエクスポートしたファイルからバイナリエディタを使って削除する。
ゴミを削除済のファイルを結合するして拡張子pngに変更して開くと…
pngとして適切に開くことができ、フラッグが表示されている。

感想とか

なんだかんだ色々教えてもらってるにも関わらず、今回初めて先輩と同じチームでのCTFだった。
しっかり協力して解いた感のある問題もあって、楽しかったー!

解けるジャンルが少ないのをなんとかしたい…

蛇足

クロスワードの答えってあんなのだったのね…

京SECの話第12回 「ペネトレーションテストの入門」 に参加してきました。

Twitterで流れてきたのを見て、今興味のある内容で、実践としてCTFやるということだったので飛びつくように参加申し込みしました。

講師: 田中ザックさん http://www.tanakazakku.com/index.html
日本語が普通にしゃべれちゃうアメリカの方。

前半、後半に分かれていて、前半ではペネトレーションテストについての説明的な講義。後半は、実践でCTF。

前半:講義部分

資料は講師の方が後々アップされるようなので、内容の説明はざっとで。主に自分が気になったところ。

ペンテストの概要や、難しさについての説明がされた。
情報の流れの速さや、技術の多さから1人ですべてを担当するのでなく分業制にしないといけない。

ネットワーク上の対策だけじゃなく、物理的な対策も必要。無線LANの対策もしないといけない。
攻撃方法は結講あるのに、あまりやられていない?

ソーシャルエンジニアリングについて。
高い確率で情報が手に入ってしまうハッキング技術。
騙すだけじゃなくて、やってほしいことについて説得する力
営業、マーケティングや、親子関係、心理療法にも関係し、使われているもの
振り込め詐欺も考え方によってはソーシャルエンジニアリングといえる?

ペンテストのやり方
現状:
情報をほとんど集めないで、スキャン、攻撃を数撃ちゃ当たるで実行している
理想:
情報をしっかり集めて、脆弱性を分析し、exploitを用意、侵入、検査。

感想

一方的に教えるのではなくわからなかったらどんどん聞くようなスタイルにしたかったそうですが、やっぱりいきなりは難しい…。
サクラ役の人を用意して雰囲気を作っておくといいのかなぁ。
ソーシャルエンジニアリングってハッキングとかの外にあるものなイメージがあったけど、ハッキングの一部なんやなぁと。

後半のCTFについても記事を書くつもりでいますが、スライドが公開されてからにします。
とりあえず前半部分だけ。

Ubuntu10.04から11.04へアップグレード後、起動失敗するのを復旧

いつもどおりUbuntuを使ってたら、アップグレードできるよ!の通知が出てたので、試しに(実機ながら)
アップグレードした。アップグレード自体は問題なく終了し、再起動後もきちんと動いていた。

その翌日、Ubuntuを起動すると、起動時のUbuntuと・が4つ並んだ画面から進まない。
よくみると、Wating for network configuration みたいなメッセージが出ていた。
おかしいなーとログを見てみると、


unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: Connection refused
こんなメッセージがいくつも見受けられた。

よくわからないので、同じような問題に遭遇した人がいないか調べてみる。

最終的に行き着いたのは、
http://www.totalcomputersusa.com/2011/10/ubuntu-11-10-booting-system-without-full-network-configuration/
ここ。

いろいろ省いてやったことだけ。詳細は元の文をあたってください。

1. 起動過程でも、リカバリモードからでもいいので、rootの権限が取れる状況でログイン
(自分はリカバリモードからやった。)

2. lightdm, network-manager, gdm を設定ファイルを含めて削除する。
# aptitude purge lightdm network-manager gdm

3. /var/runから移行。
A. mv /var/run/* /run
B. rmdir /var/run
C. ln -s /var /var/run
D. ln -s /run/lock /var/lock

4. さっき消した3つを入れ直す。
# aptitude install network-manager gdm lightgdm
5. 再起動
# reboot
(記事書いてて気づいた)元の文の11番やってない…。まぁ動いてるので大丈夫でしょう(たぶんきっと)

これでGUIでログイン画面まで表示されればOK。

仮想マシン上でエラーに遭遇してる人はいたものの実機で、というのが見当たらなかったのですごく簡単にではあるけど、記事にしてみた。

RubyのTwitterライブラリで、Listに公式RT取得

このまえAndroidTwitterクライアントで、Listでも公式RTを取得できるものがあったので、デスクトップクライアントでもできるかなぁと試してみると対応してないようだった…。
その後Twitterで、API変わった?みたいいなツイートを見かけたので調べてみた。


公式のドキュメント見に行くと…

https://dev.twitter.com/docs/api/1/get/lists/statuses
ってのがあった。


試してみるとできた!

# 認証などは省略
Twitter.list_timeline(<リスト名>, options = {:include_rts => 1})

こんな感じ。
あとは適当に!!


最後に…

セプキャンの記事途中で止まってるけどそのうち書きます!
きっときっと…。

セプキャン2日目

2日目から各クラス、各コースに分かれて、講義。
それぞれの専門的な内容に入っていきます。

パケット工作から学ぶネットワークセキュリティ

吉田さんによる講義。
IP,TCP,UDP,ICMPヘッダの中身や、ポートスキャンの原理、手法について。


演習では、実際に自分でパケットを作ってみる、
ポートスキャンツールを用いたスキャン、自分で作ったパケットによるポートスキャンなど。


講義の内容は事前課題の内容と重なる部分が多かったので、確認の意味合いがあった感じ…?
ポートスキャンの手法については、事前に調べた内容より詳細に教えてもらえたのがよかった。

偽装通信

宮本さんによる講義。

偽装通信ってどんなものか、暗号通信と偽装通信の違いについて暗号通信でなくて、偽装通信でないといけない理由について講義。
あと、自分たちならどんな場所に通信内容を隠すかを、グループごとに議論して軽く発表。
ここで問題になるのは、現在使われていることが多い、NAT,NAPTで変換されてしまうところかどうか、明らかに不審と気づかれないか(なはず)


演習は、偽装通信を行って、キャプチャ。
キャプチャしたものを見て、どうやったら偽装通信を見つけられるかについて。


通常の通信でなく、それの裏や穴使った通信の方法とその見つけ方。
通信を隠したい側と、見つけたい側どんな意図があるだろう?みたいなディスカッションが面白かった。
偽装通信を見つけるには、普段の正常なパケットを見慣れていないと厳しい…。
パケット見慣れないとなぁと改めて思った。

侵入検知

川口さんによる講義。
セキュリティ全般?や、IDS/IPSについて基本的な講義のあと、演習へ。

演習でやったのは、Snortシグネチャ作成。
シグネチャっていうのは…、簡単なイメージでは、フィルタのルールだと思えばいいはず。
渡されたパケットファイルについて、指示されたパケットを拾うようなシグネチャをひたすら書いてた。
自分は、シグネチャ書いて動いたら、数が合ってるか確認のためにwiresharkのディスプレイフィルタ使ってたけど、他の人は使ってなかったらしい…?
合ってるか自信がなかったのでいちいち確認してたのだけど。


wiresharkで確認作業してて困ったのが、単純に文字列で引っ掛ける必要があるときにディスプレイフィルタでのやり方がわからなかったこと。
パケットの内容全体に対して、文字列検索なフィルタをかけられたら楽だったのだけど。
それができなかったので、単純な検索で、対象をパケット全体にしてヒットしたものをいちいち自分で数えてました…。

まとめ?

この一日何やったかと一言で言えば「パケット見てました」な一日。
休憩時間除いて、パケット見てるか講義かのどちらか!
講師側からは、パケット見慣れてほしいという意図もあるとか…