knqyf263's blog

自分のためのメモとして残しておくためのブログ。

子育てと家族のキャリア

技術的なことばかり言ってたのに歳をとって急に子育てとか言い出す恒例のアレです。 子育てで勉強時間を取れず悩むソフトウェアエンジニアは多く御多分に洩れず自分もそうだったのですが、家族全体でキャリアを考えることで最近はそういった悩みも減ったので…

curlでKeyless Signingする (6) - Trillian編

はじめに Trillianとは Verifiable Data Structures Tree head hash Signed tree head Inclusion proof 検証方法 Inclusion proof ハッシュ計算 Leaf hash Node logIndex 完全二分木でない場合 概要 計算方法 手動で試す Signed tree head (STH) Inclusion p…

curlでKeyless Signingする (5) - Verify編

はじめに 全体像 手動で試す Fulcioのルート証明書と中間証明書を取得する Rekorでtlogを検索する 検索API 取得API UUIDの検証 tlog内の証明書を取り出して検証する 証明書チェーンの検証 メールアドレスやワークフロー情報の検証 SCTの検証 渡された署名を…

curlでKeyless Signingする (4) - Rekor編

はじめに Cosignで試す 手動で試す 【参考】rekor-cliによるアップロード curlでアップロード リクエストの作成 Signed Entry Timestampの検証 余談 まとめ はじめに 手動でKeyless Signingしてみようという誰にも望まれていないシリーズの4本目です。 curl…

curlでKeyless Signingする (3) - Signed Certificate Timestamp編

はじめに SCTとは? sigstoreにおけるSCT SCTの確認 CTログサーバの公開鍵取得 Log IDの検証 署名検証 SCTのデータフォーマット sct_version signature_type timestamp entry_type signed_entry tbs_certificate extensions SCT署名対象の作成 SCTの検証 ま…

curlでKeyless Signingする (2) - Fulcio編

はじめに 証明書発行の流れ Certificate Request Input Authentication Verifying the challenge Constructing a certificate Signing the certificate Certificate Transparency log inclusion Return certificate to client 手動で発行する Certificate Re…

curlでKeyless Signingする (1) - OpenID Connect編

確実に忘れるであろう将来の自分と、Keyless Signingに異常な興味を持つ日本に数人しかいないであろう人達のための記事です。 背景 前提 Keyless Signing全体のフロー OIDCのフロー 認可コードの取得 IDトークンの取得 手動で試す OpenIDプロバイダーの情報…

至高のGoプラグイン用ツールを作った

最近YouTuberのリュウジの料理を毎日作っているので至高とか無限とか言いがちですが個人の感想です。万人にとって美味しい料理はないように、万人にとって至高のツールは存在しません(何の話?)。ちなみに公開してすぐバグを見つけてしまったので全然至高…

GoのWasmランタイム上でZigで作ったWasmモジュールを動かす

Zigのコミッタの方から有益なフィードバックを頂いたり、Wasmランタイムのメンテナからコメントしてもらったり、Twitterでプロ開発者に助けてもらったり、と良い話が多かったのでそのへんの話も含めつつメモとして残しておきます。 最初に断っておきますがWa…

cargo-auditableで依存するcrateをバイナリに埋め込む

概要 詳細 事前準備 プロジェクトのビルド .dep-v0 section 解凍 余談 まとめ 概要 cargo-auditable というものがあるというのをGitHubで教えてもらいました。 github.com これを使ってRustプロジェクトをビルドすると依存するcrateの情報をバイナリに埋め込…

CVE-2022-32224(Railsの脆弱性)を試す

前回の記事は割と濃い味付けでしたが、今回は薄味です。 脆弱性自体は簡単なやつなのですが、調べている過程でRuby 3.1からYAMLのパースが安全になったことを知ったのでその共有がてら書きました。最近はあまりRubyを触る機会がなかったのでリハビリを兼ねて…

Dirty Pipe(CVE-2022-0847)の発見経緯が面白かった

最初に断っておくと今回は万人向けの記事ではないです。面白かったので自分が忘れないようにまとめているだけです。 本記事の位置付け はじめに 発見経緯 CRCのエラー HTTPアクセスログ 壊れたgzipのtrailerを見てみる 壊れたファイルの法則性 月次ログファ…

セキュリティツールの評価は難しい

前から思ってたことをちょっと書かずにいられなくなったのでポエムを書きました。 背景 問題 検知している方が正しいように見えがち 条件を揃えるのが難しい 環境の再現が難しい 検知数が多い方が良さそうに見える 正解かどうかの判断が難しい カバー範囲の…

20分で分かるDirty Pipe(CVE-2022-0847)

極限まで詳細を省けば何とか20分で雰囲気だけでも伝えられるんじゃないかと思って書きました。書き終えてから見返したら多分無理なので誇大広告となったことを深くお詫び申し上げます。 背景 概要 脆弱性の影響 ページキャッシュやsplice パイプ マージの可…

spliceを使って高速・省メモリでGzipからZIPを作る

良い話を含むので概要の最初だけでも読んでもらえると幸いです。この話が実用的かと言うと多分全然実用的ではないので理解しても仕方ないかなと言う気がします。 概要 ファイルフォーマット gzip 10-byteのヘッダ 拡張ヘッダ ファイル本体 フッタ(trailer)…

sigstoreによるコンテナイメージやソフトウェアの署名

恐ろしく長い上に割と複雑なので最後まで読む人はほとんどいないと思うのですが、将来確実に忘れてしまう自分のために書いたので別に悲しくありません。 まえがき 背景 sigstoreの概要 sigstoreを構成するツール群 Cosign Rekor Fulcio 署名方法 コンテナイ…

Docker DesktopからRancher Desktopに乗り換えてみた

この記事はPRを含みます。 概要 背景 移行 Docker Desktopのアンインストール Rancher Desktopのインストール Kubernetesクラスタの無効化 宣伝 まとめ 概要 Rancher Desktopがcontainerdに加えdockerにも対応したのでDocker Desktopから乗り換えてみました…

自分でやるべき(ように思える)ことを得意な誰かに任せるという考え方

完全なるポエムです。自分にとって斬新な考え方だったので思わず勢いで書いていますが、知っている人からすると当たり前ですし、冷静に読み返すとだから何だよという内容に仕上がっています。読んだあとにだから何だよと言われても責任は取れません。 はじめ…

Laravelの脆弱性(CVE-2021-3129)の解説と検証

前回以下の記事を書きました。 knqyf263.hatenablog.com これはLaravelの脆弱性(CVE-2021-3129)で使われた攻撃方法のうち応用が効きそうな部分を紹介した記事です。本記事ではLaravelでなぜ上のような攻撃が刺さる状態だったのかという詳細について書いて…

PHPでログファイルへの読み書きを通して任意コード実行をする方法

以前少し話題になったLaravelのデバッグモード有効時の脆弱性であるCVE-2021-3129のPoCを読んでいたのですが、思ったより難しくて何でこんなことをしているんだろうと思ったら発見者による解説ブログがありました。読んでみたらバイパスのために思ったより色…

英語ミーティングを乗り切るために身につけたバッドノウハウ

周りを見ていると何の苦もなく英語社会に適応しているわけですが、日々苦しんでいる人の奮闘記があっても良いのではないかと思って書きました。残念なエピソードを晒すことで実は自分もこうやって乗り切ってましたという人が現れお互いに助け合えることを期…

趣味で作ったソフトウェアが海外企業に買われ分野世界一になるまでの話

2年前の2019年8月に以下のブログを書きました。 knqyf263.hatenablog.com 今回はその続きです。前回のブログは多くの人に読んでもらうことを意識して書きましたが、今回はそうではないです。特に得た学びを書くわけでもなく何で作り始めたのか?とかどんなこ…

Terraform, Dockerfile, KubernetesなどIaCの脆弱な設定をCI/CDで検知する

概要 自分の所属企業であるAqua SecurityがTFsecというOSSを買収しました。 blog.aquasec.com TFsecはどういうツールかというとTerraformの静的解析スキャナーです。Terraformの設定ファイルを渡すことでセキュリティに関する設定ミスを主に検知してくれます…

コンテナイメージのlazy pullingをcurlで試してみる

はじめに 参考 Stargz 概要 詳細 HTTP Range 互換性 Stargzまとめ eStargz 概要 最適化 TOC, TOCEntry Footer Stargz Snapshotter eStargzまとめ 実験 トークン取得 インデックス取得 マニフェスト取得 Footer取得 TOC取得 ファイル取得 実験まとめ 余談 応…

GitHub Discussionsにリリースノートを書くのが良さそうという話

背景 GitHubで何かリリースする場合、GitHub Releasesを使うことが多いかと思います。自分は今まではGitHub Releasesにリリースノートを書いていました。以下はGoReleaserというツールのリリースノートですが、こんな感じです。 github.com ですが、いつから…

Goバイナリの脆弱性検知

Trivyのv0.17.0をリリースしました。 github.com 長い道のりでしたが、ようやくこれでGoバイナリの脆弱性検知に対応できました。夜中0時ぐらいからリリース作業を初めて気付いたら朝5時でした。 概要 Go言語で書かれたプログラムをビルドすると依存している…

DNSメッセージ圧縮の実装不備による脆弱性(NAME:WRECK)の原理とPoCの解説

今回はDNS脆弱性シリーズの中では簡単です。 要点 脆弱性の概要については以下です。 NAME:WRECKはDNSメッセージ圧縮の実装不備による9つの脆弱性を総称したもの DNSだけでなくmDNSやDHCPでもドメイン名圧縮を行っており脆弱性が見つかっている Nucleus NET,…

TrivyがRed Hatの認定脆弱性スキャナーになりました

概要 本日、Red HatからRed Hat Vulnerability Scanner Certificationという脆弱性スキャナーに対する認定プログラムが発表されました。 www.redhat.com そして上の発表の中で私の所属企業であるAqua Securityも認定を受けたことが書かれています。つまり自…

Goのバイナリから依存するmodule情報を取り出す方法

概要 内部挙動 ELFバイナリの準備 .go.buildinfo section Goのバージョン module情報 ldflagsについて Goのソースコード .go.buildinfo マジックバイト Goのバージョン情報へのポインタ module情報へのポインタ EXEファイルの処理 余談 まとめ 概要 Goでビル…

DNSpooqの脆弱性詳細と攻撃コード解説

概要 要約 詳細 背景 前提 インターネット上に公開されたdnsmasq LAN内のマシンが攻撃者の支配下にある LAN内のマシンに攻撃者管理のWebサイトを閲覧させることができる 影響 中間者攻撃 汚染拡大 DDoS/Reverse DDoS CVE-2020-25684: ポートの多重化 CVE-202…