knqyf263's blog

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

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

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

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

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…

KubernetesのLoadBalancerやClusterIPを用いた中間者攻撃(CVE-2020-8554)

今回は前回と違いライトなネタです。 概要 Kubernetesで新しい脆弱性(CVE-2020-8554)が公開されました。 github.com 拍子抜けするほど簡単な脆弱性なのですが、一応試しておきました。発見者の方のブログも以下にあります。 blog.champtar.fr 今回の脆弱性…

SAD DNSのICMP rate limitを用いたサイドチャネル攻撃について

脆弱性ネタは人気がないことが過去の傾向から明らかですが、自分が震えるほど感動したので忘れないためにも気合い入れて大作を書きました。 要約 背景 SAD DNSの解説 全体像 UDPのソースポートについて ICMP rate limit per-IP rate limit global rate limit…

Semantic Versioningの闇

今回も誰も興味ないシリーズなので今まで書いてこなかったのですが、Semantic Versioningに関して幻想を抱いている人がいる可能性があり、そういう方にどうしても現実を知っておいて欲しかったので書きました。3行要約(と可能なら余談)だけでも読んでいた…

CVE-2020-15157 (ContainerDrip) を試す

Write-up公開直後に試してたんですが、諸事情で公開を待っていたやつです(後述)。 概要 9, 10月と専業主婦をやっていてしばらく今日の献立しか頭になかったのでリハビリがてら簡単そうな脆弱性を触ってみました。 ContainerDripという名前から想像されるよ…

Berkeley DB (Hash) の実装

普段あまりこういう誰の役に立つのか分からない記事は書かないのですが、解析をするまでの背景がOSSに関するとても良い話なので重い腰を上げて書きました。 概要 古のアプリケーション組み込み型のデータベースとしてBerkeley DBがあります。元々はカリフォ…

OSSエンジニアを1年やってみた所感

最近脆弱性の話とか本業と一切関係ないことを書いていたので、今回は本業に関する話です。 2019/08/01にOpen Source Engineerという肩書になってから既に1年が経過しました。そういうポジションの人はまだ日本では少ないんじゃないのかなと思ったので何か参…

Node.jsでプロトタイプ汚染後に任意コード実行まで繋げた事例

概要 前回Node.jsのプロトタイプ汚染を起こすためのバイパス方法について記事にしました。 knqyf263.hatenablog.com プロトタイプ汚染後に何が出来るのか、ということについては基本的にアプリケーション依存なのであまり話題になることは少ないです。 自分…

__proto__の除去でNode.jsのプロトタイプ汚染を防げないケース

前提 Node.jsのプロトタイプ汚染について書いているのですが、プロトタイプの説明(prototype と __proto__ の関係とか)を定期的に見直さないと綺麗サッパリ忘れる程度にはNode.js触っていないので、何かおかしいところあればご指摘お願いします。 概要 Nod…

CVE-2020-10749(Kubernetesの脆弱性)のPoCについての解説

少し前ですが、Kubernetesの方から以下の脆弱性が公開されました。 github.com タイトルにはCVE-2020-10749と書きましたが、複数のCNI実装が影響を受ける脆弱性でCVE-2020-10749はcontainernetworking/pluginsにアサインされたものです。他にもCalicoはCVE-2…

CVE-2020-8617のPoCについての解説

概要 BINDの脆弱性であるCVE-2020-8617が公開されました。そのPoCコードを自分で書いてみたので解説しておきます。 GitHub上で公開されているPoCは見つからなかったので世界初か?!と思っていたのですが @shutingrz さんから既にISCのGitLabで公開されてい…

Trivyのアップデート(2019/10 - 2020/04)

噂によると日本でもGWが終わったらしいです。自分は去年のGWにTrivyを開発したので気づけばもう一年経ちました。いい機会なので直近のアップデートをまとめようと思います。 あと会社の評価の時期の前に自分の成果まとめておくかーと思ったのですが(多分も…

Goの1.14以前かつChrome 80以上を使っているとgo tool traceが動かない問題

問題 Goにはtrace機能がありgoroutineの実行状況などを可視化出来ます。具体的にはCPUやメモリを計測するときと同じようにpprofを差し込めば使えます。 defer profile.Start(profile.TraceProfile, profile.ProfilePath(".")).Stop() あとは実行したらtrace.…

Goのpprofがruntime関連の情報しか表示してくれない時の解決方法

問題 Goでpprofを使っていたら以下のようにruntimeの情報しか表示してくれなくなりました。これだとどこがボトルネックなのか分かりません。runtimeのpthread_cond_signalが大きいけどどこから呼ばれているのか分からないし何も分からんという感じです。 解…

イスラエルの良いところ・大変なところ

対象読者 イスラエルに引っ越す可能性があるような人やイスラエル生活に興味がある人向けに少しでも情報提供できればという思いで詳しく書いた記事になります。あくまで住む人対象で観光地とかはあまり触れてないです。それ以外の人はやたら長いだけで読んで…

KubeCon + CloudNativeConにプロポーザル出すときに気をつけたこと

サイボウズさんの記事を読んで、自分も今回プロポーザル出したときに会社の人から貰ったアドバイスをまとめておこうと思いました。というのも、自分の席の隣の人が実際に今回のKubeCon Europe 2020でレビュワーだった人ですし、チームのボスはKubeConのChair…

コミット前後でベンチマークが悪化していたらテストを落とすGoのCI用ツール

本当にただこれがやりたかっただけです。今でも既存のものがあるだろうと思っているのですが、誰も教えてくれなかったのでシュッと作りました。落ち込まないので今からでも教えてくれて良いです! pushしたらコミットの前後でgo test -bench的なことして有意…

stretchr/testify/mockでTable Driven Testしやすいようにmockeryを拡張した

アドベントカレンダー用に書こうと思っていたのですが乗り遅れました。あとあんまり大衆向けの話でもないのでひっそりと公開しておきます。 良いやり方を調べても見つからない時は自分の思いつく最良の方法を公開すると誰か凄い人がやってきてより良いやり方…

GitHub Actionsで支払いのエラーが出る場合

個人のリポジトリでGitHub Actionsを使おうとしたら「Workflows can't be executed on this repository. Please check your payment method or billing status.」と出て使えませんでした。GitHub ActionsはFreeで使えるはずなのに何だろうとは思いつつ、未だ…

curlでdocker pullをする

コンテナレジストリからイメージをpullする時にcurlで行えたら便利なのになと思うことが誰しもあると思います。自分は2ヶ月に1回ぐらいそういう時がやってくるのですが、大体やり方を忘れていて非常に時間を無駄にしていることに気づいてしまったのでメモを…

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

今回はソフトウェアエンジニアじゃない人や学生にも、ソフトウェアエンジニアという職業には夢があるかもしれないと思ってもらうために書いています。そのため既に詳しい方からすると回りくどい説明も多いと思いますがご容赦下さい。 基本的に記事とかには技…