wazuh の Fluentd forwarder を使って agent の任意のファイルを td-agent に送る

wazuh agent が入っているホストの任意のファイルを td-agent に送る方法をメモしておく。 単純にログを収集するのであればホストに td-agent を入れればいいのだが、例えば管理している全てのホストにおいて、特定のログを収集したい場合、全部に td-agent を入れるのは面倒くさい。 (wazuh agent を全部入れるのも面倒じゃないか!というのは、それはそうなのだが&h...

複数の Pod でコマンドを実行できる kubectl-multi-exec を作った

Kubernetes で遊んでいると、指定した Pod 全てで同じコマンドを実行したいというケースがありました。 kubectl exec -l app=test のような感じで label を指定して実行できれば良いのですが、今はできません。 https://github.com/kubernetes/kubernetes/issues/8876 上記 issue にありますが、頑張ってシェ...

アプリケーションを oauth2-proxy で保護して curl でアクセスするまで

追記 2020-05-13 この方法に問題があることをご指摘いただきました。本来関係ないクライアントがリソースサーバーにアクセスできる問題がありますので、取り急ぎこの方法は非推奨であることを書いておきます(では、どのようにすればいいのかというところをまた後日追記します)。 リソースサーバーと全く関係の無いクライアントが、全く関係のない文脈で正当に取得した ID トークンを用いて、リソースサーバーの...

fakeobj を利用して任意アドレスの読み書きを行う

前回は Memory Corrupution まで行ったので、今回は任意のアドレスを書き換えるまで行う。 任意アドレスを行うにあたって、次のようなメモリレイアウトを用意する。 これは PoC を参考に自分の理解のためにお絵かきしたもの。 今見返すと自分でも読めないし、これでわかる人いないと思うが… 簡単に説明すると、まずは outer というオブジェクトに hax という fake...

fakeobj primitive を使った Memory Corrupution

前回の記事 では addrof という関数を作り、メモリリークを行った。 この記事 では addrof の反対の動作をするものとして fakeobj という attack primitive が紹介されている。 attack primitive とは exploit primitive とも呼ばれ、攻撃を成功させる過程のうちの1つのテクニックみたいなイメージ。 addrof が object を配...

WebKit JSC における RegExp の JIT 最適化による脆弱性を調べた

https://googleprojectzero.blogspot.com/2019/08/jsc-exploits.html で Exploit 7 として紹介されている脆弱性について調べた。 PoC が公開されているのと Web に解説もあるので、取っ掛かりやすかろうということで。 これはどういうバグかというと、PoC の The Bug に書かれている通りで、RegEx のマッチング処理が...

Webkit の JIT の仕組みと JIT を利用した攻撃と防御について調べた

WebKit で使われている JIT 周りについて調べたのでメモ。このあたりの知識全然ないまま手探りでリソースを探して解釈した結果を書いているので、間違っていたらご指摘ください。 JSC の execution engine は次の4つの最適化レベルがある。これらは実行時に使い分けられる。 LLInt Baseline JIT DFG JIT FTL JIT ref : https://we...

WebKit の JSObject の Butterfly アドレスについて調べた

WebKit の JSObject について調べていたのでメモ。 準備 まずはリポジトリを clone する。 $ ghq get git://git.webkit.org/WebKit.git debug 付きで JavaScriptCore のみをビルドして実行する。 $ ./Tools/Scripts/build-webkit --jsc-only --debug $ ./WebKitBui...

Method Overwrite をリバースプロキシ環境下で悪用する

X-HTTP-Method-Override ヘッダは知っている人も多いと思います。 いわゆる Method Override と呼ばれるもので POST で他のメソッドを代替するときなどに使用されます。 例えば次のようなリクエストを送ると POST ではなく PUT として処理されます。 POST /posts HTTP/1.1 Host: example.com X-HTTP-Method-O...

Helm Chart で生成された manifests をテストする

chart のテストは https://helm.sh/docs/topics/chart_tests/#helm にあるように、実際に helm install する必要があります。 そうではなくて、単純に吐き出される manifests が期待したものかどうかをテストしたいというケースもあると思います(僕はあった)。 helm template --execute (v3 だと --show-...