タグ

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

  • ping を実行するのに CAP_NET_RAW は必要なくなっていた

    必要がなくなっている、というか特定の条件では CAP_NET_RAW は不要という話。 ある講義で Capability について話す機会があり、いつもどおり CAP_NET_RAW が必要な ping を使った実験をしていたところ、環境によっては CAP_NET_RAW File Capability を与えなくても ping が実行できることに気づき、少し調べてみました。 どうも随分前に net.ipv4.ping_group_range というカーネルパラメータが追加されていたらしく、これを設定することで ICMP ソケットを扱うグループを指定できるため、 CAP_NET_RAW や setuid なしで実行できるようになっていたようでした。 以下、調べたことを書いておきます。 ubuntu 18.04 では CAP_NET_RAW なしでは動かないのに対し、ubuntu 20.04

    ping を実行するのに CAP_NET_RAW は必要なくなっていた
  • コンテナやコマンドなどのリソース単位で外部への意図しない通信をブロックする

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

    コンテナやコマンドなどのリソース単位で外部への意図しない通信をブロックする
  • 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 に保存しているクレデンシャルを環境変数として利用するためのツールを作った
  • 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)のメモ
  • 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のクエリログを取得する
    mapk0y
    mapk0y 2019/11/21
  • 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のクエリログのバイナリを読む
  • 1