Issue #4: Rust 製アプリケーションの認可実装のコンパイル時検証ほか
Rust を用いて認可処理を伴うアプリケーションを書くときに使えるかもしれないフレームワーク Dacquiri、加速するサプライチェーンセキュリティ周りの動向など、今週米内が気になった動向をお伝えします。
Written by Takashi Yoneuchi
Published at February 06, 2022
Share this article with:
こんにちは、もっと楽にセキュアなプロダクト開発/運用を実現できるようにしたい米内(@lmt_swallow)です。今週も Issue #3 までと同様に、普段の生活の中で気になった情報をざっと紹介していきます。
- 📶 Tech
- ⚒️ Application Security
- ☁️ Platform Security
- 🛣️ Supply Chain Security
- OpenSSF Announced The Alpha-Omega Project to Improve Software Supply Chain Security for 10,000 OSS Projects
- “Provenance comes to the sigstore Project Helm Charts”
- “How Citi is building the secure software factory with Sigstore and Tekton”
- “Sigstore ❤ Ruby!”
- “sigstore project update — January 2022”
- cosign-keyless-admission-webhook, a Kubernetes admission webhook verifying attestations of container images with cosign
- “Sigstore: Bring-your-own sTUF with TUF”
- “Managing Disconnected Signatures Using cosign”
- 🧪 Security Research / Vulnerability Disclosure
- 📶 Market
- ✅ Wrapping Up
📶 Tech
⚒️ Application Security
“Eliminating Authorization Vulnerabilities with Dacquiri“ by d0nut
「Rust でアプリケーションを書く際に認可実装をコンパイル時検証可能にするためのフレームワーク」である Dacquiri に関するブログが出ていました:
Eliminating Authorization Vulnerabilities with Dacquiri
かなり informal な表現を多用しつつ説明すると、Dacquiri は認可実装の漏れや不備を、以下の 2 つをもって(trait bound が unsatisified であるという形の)コンパイルエラーとして検出するためのフレームワークです:
- (1) “attribute”(例: 「このユーザは認証済である」)という概念を導入する
- (2) アプリケーション内での “操作” (例: 「あるユーザの口座からお金を引き出す」)の際に、その操作が必要とする “attribute” たち(≒ “entitlements”)の存在が確認されているかを trait boundary として表現するのをサポートする
もっと抽象化していうなら Dacquiri は「アプリケーション内の “操作” を定義する際に、その “操作” に関する事前条件が満たされていることを trait boundary として表現すること」をサポートしてくれる君である、というわけです。この手の発想は突飛なものではなく、自然なものですが、面倒な実装をフレームワークとして Wrap したという点がこのフレームワークの貢献だと捉えることができます。
認可などのセンシティブな処理を書く際にこのように静的に検証可能な領域が大きくしていくようなプラクティスは(大事なアプリケーションを書くときほど)実践していきたいものですね。
authz0, an automated authorization test tool by hahwul
(認証・)認可のテストを網羅的に・自動的に行うことを目的としたツールは定期的に出てきますが、気がついたら以下のようなツールが登場していました:
GitHub - hahwul/authz0: 🔑 Authz0 is an automated authorization test tool. Unauthorized access can be identified based on URLs and Roles & Credentials.
ざっと試してみたところ、まだ若干かゆいところに手が届かない感はありました。 Nuclei とかもそうなのですが、こういうテストのための定義を YAML で書く、というのは(表現力に乏しくて)難しい側面があると思うのだよな……。
このへんをいい感じに自動化したいと思っている勢力はたくさんいるはずなので、引き続き頑張っていってほしいところです。応援していきたい。
“Online Schema Migrations in SpiceDB” from Authzed
SpiceDB などの Schema (認可判定のための種々の定義)を Online Migration するためのチュートリアル記事が Authzed から出ていました:
Online Schema Migrations in SpiceDB
実際 SpiceDB のような一度運用に載せた後に止めにくい系ソフトウェアを本番投入するとなると、確かに Online Migration の難易度は気になるところです。この記事を見る限りは、少なくとも単純なケースではそんなに難しくなさそうですね。
自分自身はまだ Online Migration をしたいな〜というほど SpiceDB を触っていないですが、この手のマイクロサービスの Developer eXperience を考えるために今度自分でも深く考えてみたいなというところです。
[中の人] “Webサービスにおけるログイン機能の仕様とセキュリティ観点”
弊社(株式会社 Flatt Security)のメンバーがログイン機能の実装において起きうる脆弱性と、その対策についてのブログ記事を書きました。2021/02/06 現在 680 はてブもの反響を頂いており嬉しい限りです。いい記事なので、よければぜひご一読ください!
Webサービスにおけるログイン機能の仕様とセキュリティ観点 - Flatt Security Blog
☁️ Platform Security
“Amazon GuardDuty now protects Amazon Elastic Kubernetes Service clusters”
GuardDuty の EKS サポート!めでたい。AWS は静的な設定監査/ガードレール方面だけでなく、この手のランタイムモニタリング系の仕組みも手堅く拡張してきていていいですね。
Amazon GuardDuty now protects Amazon Elastic Kubernetes Service clusters
aws-customer-security-incidents, a list of publicly disclosed security incidents of AWS customers
AWS の利用に際して起こったセキュリティインシデントを、その根本原因や権限昇格の流れ、影響度などを整理しつつリストアップしてみたものが流れてきました:
GitHub - ramimac/aws-customer-security-incidents: A repository of breaches of AWS customers
よくある現実的なパターンの事例が多い(≒ 最近のバグバウンティ的な込み入った攻撃例は少ない)ので、チーム内で過去のインシデントから学びつつ意識を高める、といった目的には一定マッチしそうなリストですね。
🛣️ Supply Chain Security
OpenSSF Announced The Alpha-Omega Project to Improve Software Supply Chain Security for 10,000 OSS Projects
OpenSSF から新プロジェクトとして、OSS のセキュリティを向上させていくためのプロジェクトである “Alpha-Omega Project” がアナウンスされました:
OpenSSF Announces The Alpha-Omega Project to Improve Software Supply Chain Security for 10,000 OSS Projects - Open Source Security Foundation
“Alpha-Omega Project” は “Alpha” と “Omega” の 2 つのプロジェクトからなります。このうち、前者の “Alpha” は OpenSSF の Securing Critical Projects ワーキンググループを中心に選定されるとりわけ重要な OSS プロジェクトへのサポートを行うためのものです。一方後者の ”Omega” はより広い範囲(最低 10,000 程度)のプロジェクトのサポートを行うためのプロジェクトとなっています。
個人的にはサポートされる OSS コミュニティ側がどういう反応を示すのかが気になるところです。社会的に重要度の高い OSS を上から並べてみたときに、その上の方にあるプロジェクトの全てがいい温度感で迎えくれてくれるかというと、どうなんだろうなあ。杞憂だとよいのですが。
“Provenance comes to the sigstore Project Helm Charts”
以下の記事では sigstore が公開している Helm Charts に付加されるようになった Helm Provenance の利用方法や、Helm の sigstore プラグインの概要や用法が説明されています。Helm の Integrity の検証のための機能、知らなかった。
Provenance comes to the sigstore Project Helm Charts
“How Citi is building the secure software factory with Sigstore and Tekton”
Citi の Supply Chain Security 周りへの取り組みを概説する記事が Chainguard から出ていました。SLSA フレームワークなどをベースに、Tekton / Sigstore / Kyverno / Spire などを用いたリファレンス構成を考えてますよ、的なやつです:
How Citi is building the secure software factory with Sigstore and Tekton
“Sigstore ❤ Ruby!”
Ruby/gem 方面のコミュニティと Sigstore プロジェクトとの協働も始まったようです:
Sigstore ❤ Ruby!
“sigstore project update — January 2022”
以下は sigstore に関する 1 月のレポートです:
sigstore project update - January 2022
“sigstore is now getting close to being operationally GA” というのにワクワクしますね。確かにコミュニティとしての成長も感じられる時期ですし、コードベースもだいぶ安定してきているし、cosign は最近 1.0 で GA を迎えたしで、いい流れを感じます。
cosign-keyless-admission-webhook, a Kubernetes admission webhook verifying attestations of container images with cosign
以下はタイトルの通り cosign による署名検証を Admission Webhook で行うための実装です。これ sigstore 公式に既に存在してると思ってたけど、なかったんかい:
GitHub - appvia/cosign-keyless-admission-webhook: Kubernetes admission webhook that uses cosign verify to check the subject and issuer of the image matches what you expect
“Sigstore: Bring-your-own sTUF with TUF”
public な Sigstore インフラ(例: Rekor や Fulcio のパブリックインスタンス)を使いたくない場合、自前で用意した Root of Trust / Bring-Your-Own (BYO) TUF を用いて Sigstore インフラを組み立てられるよ、という記事が Sigstore から出ていました:
Sigstore: Bring-your-own sTUF with TUF
ひとまず「頑張れば公開インフラに頼らずに Sigstore 系ツールチェーンを使うためのインフラが作れる」という事実さえ覚えておけば日常生活に支障はないのですが、より細かい話を知りたい方や将来の自分向けに追加説明を置いておくと、TUF とは The Update Framework という「ソフトウェア更新に関するセキュリティを支えるためのフレームワーク」です。詳しくは以下の記事を読んでみてください:
The Update Framework and You
そして TUF は、Sigstore の公開インフラ類の Root of Trust を保護するために利用されています。これに関しては以下の Dan Lorenc 氏の記事で説明されているので、こちらを確認するとよいでしょう:
Using The Update Framework in Sigstore
“Managing Disconnected Signatures Using cosign”
以下は OCI image の signature の位置が disconnected である (= 標準的な場所にない) ときの署名検証方法のチュートリアル記事です。これはめっちゃ面白いというわけではないですが、最近ちょっと入り用になったので、備忘録がてらここにリンクを置いておきます:
Managing Disconnected Signatures Using cosign
🧪 Security Research / Vulnerability Disclosure
“How We Fixed the Dependency Confusion Vulnerability in Over 600 Ruby Applications” by Shopify
Shopify が Dependency Confusion 対策を解説する記事を出していました:
How We Fixed the Dependency Confusion Vulnerability in Over 600 Ruby Applications
この記事の背景には、かつて Shopify は Bug Bounty にて Dependency Confusion 攻撃の可能性について報告を受けている、という過去があります。その詳細は、以下のバグハンター視点での記事で語られているので、興味があればこちらもあわせて読んでみるとよいでしょう:
Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies
“Hacking Google Drive Integrations”
いくつかの “Google Drive Intergration”(Google Drive API を叩くような実装)が発行する Google Drive API へのリクエストに、何らかの方法でクエリパラメータを追加することで、当該 Integration から SSRF ができた的な事例についての Writeup です:
writeups/Hacking-Google-Drive-Integrations.md at main · httpvoid/writeups
“A story of leaking uninitialized memory from Fastly”
HTTP/2 から HTTP/1.1 への変換時に、変換後のリクエストに改行文字列を含ませることで良い感じに Requst Smuggling できる場合がある、といった事例は去年しばしばバグバウンティ界隈で見られていた気がします。
最近見かけた以下の記事は、そんな Request Smuggling を用いた攻撃の事例でした:
A story of leaking uninitialized memory from Fastly
ここで語られている事例は (1) Fatsly への HTTP/3 なリクエストの際に :authority
ヘッダを用いて Request Smuggling を行うことができ、(2) さらに Fastly 内部で HTTP/3 終端をしている存在が H2O であることが特定でき、(3) 最終的には H2O の QUIC 実装のバグを用いた exploit により他リクエストのデータをリークすることができた、というものです。
HTTP/2 に関連する諸実装に関しての諸リサーチの流れはそのまま、まあしばらくはこの手の Request Smuggling の実例は見つかりそうなものですね。HTTP/2 や HTTP/3 関連実装の運用をしている方は、引き続きこの手の情報をウォッチしつつ、適宜当該実装のアップデートをするようにしておきたいものです。
📶 Market
🏢 Startup
Wissy, a WireGuard-based VPN service, started a pre registration for beta
久々に日本発の SaaS 情報が出ていました:
ノーコードでWireGuardフルメッシュVPNを企業ネットワークに提供するSaaS「Wissy」がβ版ユーザー募集開始 | TechCrunch Japan
LP などから読み取れる限りでは、WireGuard を良い感じに使うためのガワを作っているのだと思うので、いまのところは実質 Tailscale と同じことかそれに類することをしたいのかなと理解しています。今のところは正直差分が分かっていないのですが、今後事業フェーズが進むと(技術的なものか対象セグメント的なものかはさておき)差分も見えてくるだろうと思うので、続報を楽しみに待っておこうと思います。
Cynomi secured $3.5M in seed funding
vCISO サービスをやっている Cynomi がシードラウンドの資金調達をアナウンスしています:
Virtual CISO startup Cynomi raises $3.5M to help SMBs automate cybersecurity
vCISO 方面の事業には、もともと人材紹介/仲介的なモデルの事業が多いのではと思いますが、そこを ”AI” でどうにかするぜ的なソリューションらしいです。
ここでいう ”AI” というのが何を指すのかは置いておくとして(この事業のターゲット層を考えるとこういう語を敢えて選ぶほうが伝わりそうですし…)、実際とくにコーポレートガバナンスの文脈で「セキュリティは何から始めればいいか分からない」的な課題は尽きないところなので、実質どういうセグメントから・どういうタッチポイントで参入するかが楽しみですね。
(個人的にはこのへんハイタッチな入り口が多いけど、対象を中小に絞るなら、テックタッチな参入アングルもありそうだと思っていて、そういうのが出てくると面白いんじゃないかな〜と思っています。もっともオープンな採用情報があればタッチポイント設計とかは察しが付きそうなもんですが、なかったので、今どうしようとしてるのかは全く分からない)
Hunters raised $68M in Series C funding
SOC 方面向けのプラットフォームをやっている Hunters がSeries C の調達をアナウンスしています:
Hunters raises $68M Series C for its security operations platform
僕はこの手の領域に疎いので、このリリースを受けて LP をざっと読んで見ましたが、うーん、この辺のソリューションがどう差別化をしているのか本当に分からない><
領域的には ACV が高い/顧客ライフタイムは長めの製品なのだろうとは思いますし、はじめの顧客を握るところができれば Moat は作りやすいのではと思いますが、立ち上がりの戦略をどうしていたのかは気になります
🗺️ Public Sector
“Engineering Trustworthy Secure Systems: Draft NIST SP 800-160 Volume 1 Revision 1 Available for Comment”
“Systems Security Engineering” という概念をフォーマルに論じるための基礎的な概念類の定義・導入や、実際の取り組みを進める際の考慮事項などを整理する、”Trustworthy Secure Systems” (NIST SP 800-160 Volume 1) の Revision 1 が出ていました:
Engineering Trustworthy Secure Systems: Draft NIST SP 800-160 Volume 1 Revision 1 Available for Comment
余談ですが、この手の文章に限らず、フレームワークチックな文書をセキュリティが専業でない方が(なんならセキュリティが専業な人でも)読むのがキツいですよね。上記のページでは ”Emphasizing that the responsibility for engineering trustworthy secure systems is not limited to security specialties” と言っているけれど、実際のところこれを非 security specialities の人に読んでくれ〜というのは多分厳しい。そんなことを思いながら「こういうパブセク系のアウトプットはちゃんと自分の中に腹落ちさせつつも、プロダクト開発の現場の 1 つ 1 つの課題を現場と同じ目線で考えられる人間でありたいな、バランスの取れる人間でありたいな」と思うのでした。
“Office of Management and Budget Releases Federal Strategy to Move the U.S. Government Towards a Zero Trust Architecture”
OMB から出ていたもの。ななめ読みしかできてないので細かい言及は控えますが、去年のパブコメの段階との差分を注視しておきたいところ:
Office of Management and Budget Releases Federal Strategy to Move the U.S. Government Towards a Zero Trust Architecture | The White House
✅ Wrapping Up
ここ最近は Software Supply Chain Security 方面において、堰が切れるかのように各プレイヤーのアウトプットが続いているように感じます。そんなこの瞬間は、筆者(米内)には「Identity Management や Ops に関する各種テクノロジの成熟が、Software Supply Chain をソフトウェア的な管理の対象として扱うことを可能にしてきたという技術的事実」と、「実際の Software Supply Chain に関連するインシデントの増加により、この領域に関連する脅威への対策が投資すべき対象になってきたというと社会的背景」が交差した結果訪れたターニングポイントであるように感じられており(こう抽象的に書くとフェイク野郎感がすごいですが)、だからこそ少しの間強めにこの領域に自分の身を投じてみるつもりです。
先週はお疲れさまでした。今週もはりきっていきましょう!