SSRF対応のgolangライブラリをつくった
SSRFそのものの解説は、最近公開されたはせがわようすけさんのスライドが詳しいので、そちらを見ていただくとして、、、
最近では実際の攻撃事例もでてきている、ということで、ついカッとなってgolangのライブラリを作ってみました。
使い方は antissrf.Client()
で *http.Client
が帰ってくるのでそれをフツーに使うだけというカンタン仕様です。
プライベートアドレスとかループバックアドレスとかリンクローカルアドレスにアクセスしようとするとerrorが帰ってきます。
var client = antissrf.Client() func main() { // errが帰る _, err := client.Get("http://169.254.169.254/") }
antissrf.Client()
は *net.IPNet
を可変長引数で受け付けるので、他にブラックリストを追加したいケースにも対応可能です。
var client = antissrf.Client( antissrf.MustParseCIDR("192.0.2.0/24"), antissrf.MustParseCIDR("198.51.100.0/24"), antissrf.MustParseCIDR("203.0.113.0/24"))
名前解決のあとのtcpコネクションをはる直前のremoteのIPアドレスをチェックしているので、DNS Rebindingな攻撃にも安心です。
そんなわけで、ご活用ください。