Semaphore CI で BPF を使ったプログラムのテストをする

BPF を使うプログラムはコンテナで動かすには特権が必要であったり、Linux カーネルの特定のコンフィグが ON になっていないと(CONFIG_BPF=yとか)動かないなどあり、Circle CI や Travis CI のような有名どころの CI では十分にテストすることができない。 Semaphore CI は CI 環境として VM が提供されるので、Docker などの実行が可能である...

Information Leak from Browser Cache with Fetch API

CORS の設定ミスとブラウザへのキャッシュの設定によって、Information Leak するというテクニックのメモ。 対象の API レスポンスヘッダに Access-Control-Allow-Origin: * がついているとする。 また、Access-Control-Allow-Credentials が false なので、セッションが有効な状態での Cross Origin からの...

Profiling Event in Container With Cxray

前回は bcc を使ってコンテナ内の execve を取得する方法について書きました。 最近 falco などを使い、Kubernetes の Pod の安全性を高めているのですが、そのルールを定義するのが難しいと感じていました。 例えば NIST の Application Container Security Guide の 4.4.4 節では次のイベントが発生することを検知できるようにしたほ...

bpf(bcc) を使ってコンテナ内での execve をトレースする

bpf(bcc) の簡単な使い方などについては 前回 書きました。 bpf は falco, sysdig, cilium など、Kubernetes 環境で使われるケースも増え、コンテナに対するトレース活用も多く出てきている印象があります。 ここでは bcc を使ってコンテナ内の execve をトレースする方法をメモしておきます。 Docker などのいわゆる Linux コンテナもホストから...

BPF(bcc)のメモ

bpf や bcc 周りは使わないと忘れてしまうのでメモ。 Hello, World clang で bpf オブジェクトを作って C でそれを読み込む…という方法よりも https://github.com/iovisor/bcc/ を使う方が楽なので、bcc でやります。 C でやると環境作るところから大変なので… ref : https://blog.raymon...

Pod のプロセスの oom_score_adj はどうやって決まるか

Node のメモリが上限に達した場合、プロセスが最初にkillされるのはBestEffort→Burstable→Guaranteed という順番。もし同じ QoS だった場合、 oom_score_adj で決まる。 のだけれど、 oom_score_adj はどうやって決まるのだろう…と気になったのでメモ。 次のようにメモリ制限を 128Mi に抑えた Pod を用意する。 ap...

Kubernetes クラスタへの攻撃例とその対策

Kubernetes のセキュリティ周りを調べていたので、そのメモです。 間違いや追加の情報があれば @mrtc0 までお願いします。 Kubernetes Version 1.14.4 ServiceAccount Token の Auto Mount を無効する ServiceAccount の token や証明書は Pod 内の /var/run/secrets/kubernetes....

Kubernetes クラスタの audit ログを取得する

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

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 <unis...