モンモンブログ

技術的な話など

「セキュリティコンテストチャレンジブック」はクラッキングの基本を広く、そして結構深く学べる良本

セキュリティコンテストチャレンジブック CTFで学ぼう!情報を守るための戦い方 を読みました。

セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-

セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-

サブタイトルの CTF とは Catch The Flag の略で、 用意されたシステムの脆弱性を突いたりデータを解析したりして Flag と呼ばれるキーワードを盗み出すセキュリティコンテストのことです。 オンラインやオフラインであちこちで開催されてます。(例:ksnctf

自分はプログラミングの世界にはC言語から入ったためか昔から低レイヤーが好きで、 学生時代はバイナリ解析やらパケット解析やらの真似事をしてキャッキャ遊んでたわけですが、 最近になってまた低レイヤーいじりたさが再燃し、 よし CTF というものに挑戦してみようと思い立ち、この本を手に取ったわけです。

内容紹介

5章からなります。

以下、各章それぞれ内容を軽く紹介。

Part 0: イントロダクション

そもそもCTFって何? どうやって参加するの?

Part 1: バイナリ解析

主に ELF 形式のバイナリ解析のためのあれこれを解説。

  • file, strings, strace, ltrace, objdump といったLinuxコマンドの紹介
  • OllyDbg, IDA といったツールの紹介
  • gdb による動的解析の基礎
  • レジスタ、スタック構造、バイトオーダ etc の解説
  • x86アセンブリの基本的な読み方

Part 2: pwn

pwn とは英単語 own の typo で、システム権限を奪取するって意味のスラングです。Part 1 の応用編のような内容。 スタックオーバーフロー攻撃や書式文字列攻撃について、実例を挙げながら丁寧に解説してくれているのが嬉しい。 これらの攻撃手法をここまで詳細に説明してくれてるドキュメントってあまりないかも。

  • checksec.sh, gdb-peda などのツールの紹介
  • RELRO, SSP, NX bit, ASLR, PIE といった pwn にあたって必要となる知識の解説
  • スタックオーバーフロー攻撃の解説。ローカル変数の書き換え、リターンアドレスの書き換え、Return to PLT, Return to libc, Return Oriented Programming, etc
  • 書式文字列攻撃の解説。スタックの値の読み出し、任意のアドレスからの値の読み出し、任意のアドレスへの書き込み、GOT Overwrite, etc
  • ASLRの回避方法

Part 3: ネットワーク

主に Wireshark (パケットキャプチャツール) や Python の Scapy ライブラリを用いたパケット解析について解説してくれてる。 あと Netcat(ncコマンド)便利。

Part 4: Web問題

ブラックボックスであるWebサービスに様々な入力(単純なGETアクセスを含む)を与えて脆弱性を探っていくのがWeb問題。

  • PHP の system 関数や Perl の open 関数を利用したOSコマンドインジェクション
  • アップロードファイルの権限不備をついた攻撃

Part 5: SQLインジェクション

Web問題同様、Webサービスに様々な入力を与えてエラーメッセージやHTTPステータスコードから判断する。

  • MySQLPostgreSQLSQLite か?
  • SELECT文へのインジェクションの解説。シングルクォート (') などを入力して探っていく。UNION による任意のデータの窃取。information_schema.columns を読んでデータベース構造を調査。
  • INSERT, UPDATE文へのインジェクションの解説。パスワードなどの秘密情報を username などに書き出させたりとか。

感想

広く浅くCTFが概観できる本だと思って軽い気持ちで読み始めたんですが、初心者にとっては決して浅くなく、各テーマごとに結構詳しく掘り下げてくれていてかなり骨太な内容でした。

これをネット上の記事で勉強しようとすると、前提知識が必要だったり、内容が古すぎたり紹介されてるツールが開発終了してたり、システム構成が違うために動かなかったり、英語の記事しかなかったりと、ただでさえ初学者には難しい内容なのにトラップが多くて途方に暮れちゃうことが多かったです。

本書は使うべきツールや基本的な概念を示した上で、実例を通して詳細に解説してくれているので、いやそれでもまだ難しくて全部は理解出来てないですけども、今後勉強を進めていくための道しるべとなってくれる良本だと思いました。

「フリーランスエンジニアでプロジェクトを進めることについて考える会」イベント参加メモ

フリーランスエンジニアでプロジェクトを進めることについて考える会 - connpass

こちらのイベントに参加しました。会場は日本橋サイボウズさんのところ。 15分くらい遅刻しちゃったので最初の安藤さんの発表は途中からになります…m(_ _)m

フリーランサーのインバウンドマーケティング / 安藤真衣子さん

発表資料 フリーランサーのインバウンドマーケティング

どんな人?

遅刻して自己紹介聞き逃しましたがm(_ _)m、
クソアプリ Advent Calendar 2017 では「カタカタカタッターン」を可視化するクソアプリを作ったりしたそうです カタカタカタッターンを可視化した - Qiita

以下発表

フリーランスとして楽しくお仕事していくにはインバウンドマーケティングが大切。

ていっても大げさなことではなく、

  • 自分の好きなこと、得意なことをやって、
  • ブログとかで見て見てー!って発信してるだけでOK。

何らかのアウトプットをしていると意外とあっさり声をかけてもらえる。

声をかけられるフリーランスエンジニアになるには / 渡邊 達明さん

どんな人?

渡邊さん作の niconicocoa というサービスに質問や感想を投げると、発表中のスライドにニコニコ動画よろしくコメントが流れるというインタラクティブな発表でした。楽しい。

以下発表

たくさん声がかけられるようになると

  • 安定収入!
  • 仕事が選べる!

発注する側はどうやってエンジニアを探すか?

  1. 知り合い
  2. 知り合いの知り合い
  3. クラウドソーシング
  4. ググってみる

知り合いベース(1, 2)で受発注出来るとなにかとやりやすい。知り合い増やすの大事。

3, 4 の受注を増やすためにも
ポートフォリオを充実させよう!

  • 実績としてブログ等に掲載させてもらえる仕事を出来るだけ選ぶ。
    実績掲載できないなら割増するくらいの勢いで
  • 仕事じゃなくてもメディアに取り上げられるようなものを作るとマル
  • 技術スタックがはっきりわかるプロフィールにする
  • ブログで発信!
  • 「この技術ならこの人」ってなってると強い。本を執筆したりとか。

注意点

  • 過去の案件と似たようなものばいかりになりがち。新しい技術を積極的に使っていくのマスト

まとめ

  • 知り合いを増やすの大事
  • 強みを作っておくと話が早い
  • ポートフォリオやブログでアウトプット
  • スキルの切り売りにならないよう新しい技術もやっていく

石橋を叩いて渡るフリーランスのなり方 / 今佑介さん

どんな人?

以下発表

大学出てすぐとか、新卒1年目とかでいきなりフリーになるの大変。
バンジージャンプするまえにロープがあるかどうか確認しよう

段階踏んでフリーランス化していく

  1. 副業
    • 本業と掛け持ち。ちょっと大変だけど。
    • twitterとかで「副業募集」って発信してみる。反応がなかった場合精神的ダメージ受けるけど、そのくらいでへこたれるならフリーランスは向いてないかも…
  2. 元の会社と業務委託契約
    • 元の会社の仕事は週3くらいにしてもらって、週2で別の仕事
  3. 完全フリー

どうやって仕事とる?

  • 営業活動はしたことない。FBメッセとかで来る
  • 信頼ポイントを貯めよう

最近のフリーランス事情(発注側視点)

  • リードエンジニアの採用が難しくなってる
  • いいエンジニアはみんなフリーランスになってる。特に都内。

良いフリーランスエンジニアの見分け方

  • 本質的にやりたいことをヒアリングできる人
  • 工数が少なくなる案を提案できる人。
    工数積んで稼ぐより、良いものを作ろうという人
  • 知り合いの信頼できるエンジニアに相談しよう
  • 短期(1ヶ月とか)での契約を渋るエンジニアはあまりいいエンジニアではないかも?(仕事へしがみつきたさが出てる?)

その他

  • 準委任契約がいい。一括請負だと揉めやすい
  • 契約期間はまずは1ヶ月から。実際仕事してみるとダメなパティーンを回避

kintoneなどを活用することで正社員リソースを一切使わずにフリーランス協会のシステムを構築した話/ 西小倉宏信さん

発表資料 20180904_kintoneなどを活用することで正社員リソースを一切使わずにフリーランス協会のシステムを構築した話 - Google スライド

どんな人?

これまで

  • 大学卒業と共に起業
  • 外注するお金ないから内省で開発
  • クラウドソーシング始める。外注すると寝れる時間が増えることに気がつく
  • 案件を見積もって受注するのに苦戦 -> 時間課金にした

お仕事の進め方

  • 週次で原価をお客さんにシェア
  • 月次でその1.5倍を請求
  • 1週間毎にお客さんと一緒に振り返る

ってやり方で2年くらいやってるそう。そのために作ったサービスがこちら↓

時間管理ツールTimeCrowd

  • タスクごとにスタート・ストップ
  • 誰がどのタスクをどれくらいやってるか分かる

2017年から フリーランス協会 を開発

フリーランス協会で使ってる技術

  • kintone (database, 画像とか)
  • heroku(インフラ)
  • SendGrid(メール)
  • Google認証
  • stripe(課金)
  • ChatWork(チャット)
  • cloud 9(開発環境)

kintoneはいいぞ…!(よさをいっぱい語ってくれてたけどメモれず><

そんなわけで

素敵なイベントをありがとうございました!m(_ _)m

CentOS で man が見れない場合は man-pages パッケージを再インストール

環境こんな感じ。vagrantcentos/7 です。

% uname -a
Linux localhost.localdomain 3.10.0-693.11.6.el7.x86_64 #1 SMP Thu Jan 4 01:06:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
% cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

CentOS で man がなぜか見れない場合、

% man ls
No manual entry for ls

まずは man-pages パッケージがインストールされてるかチェックして、

% rpm -q man-pages
man-pages-3.53-5.el7.noarch

もしなければインストールで解決。

% sudo yum -y install man-pages

man-pages パッケージはインストールされてても、含まれてるべきファイルが存在しない場合があるっぽい。

% rpm -ql man-pages | grep -w ls
/usr/share/man/man1p/ls.1p.gz
% ls /usr/share/man/man1p/ls.1p.gz
ls: cannot access /usr/share/man/man1p/ls.1p.gz: No such file or directory

パッケージを再インストールしてやればOK。

% sudo yum reinstall -y man-pages

それでも man が見れないコマンドがあったら、

% man ionice
No manual entry for ionice

そのコマンドのパッケージを特定して

% rpm -qf $(which ionice)
util-linux-2.23.2-43.el7_4.2.x86_64

再インストールしたら見れるようになりました。

% sudo yum reinstall -y util-linux