• トップ
  • ブログ一覧
  • HSTS(HTTP Strict Transport Security)とは?
  • HSTS(HTTP Strict Transport Security)とは?

    はじめに

    システムやインターネットは生活をする上で欠かせないものとなりました。その分、個人情報などを扱う機会も多くなり情報セキュリティ対策が需要になってきている。

    現在携わっているプロジェクトでリリースに向けて脆弱性診断のフェーズがあります。その際、セキュリティ会社へ脆弱性診断を依頼したところ、HSTS(HTTP Strict Transport Security)の設定がされていないと指摘を受けた。

    指摘の対応をするにあたり、HSTSについて調べたことをまとめる。

    HSTS(HTTP Strict Transport Security)とは

    WebサーバがHTTPヘッダに設定する項目の一つで、ユーザが同一ドメインに対するアクセスした際にHTTPでアクセスしようとしても、ブラウザが強制的にHTTPSでアクセスを行う仕組み。

    簡単にまとめると、「https://www.apple.com/jp/」にいる状態で「http://www.apple.com/jp/iphone-15/」にリクエストをしてもブラウザが勝手に「https://www.apple.com/jp/iphone-15/」でリクエストを送ってくれるということらしい。

    HSTSはRFC6797で規定されてる。

    HSTSはどういった攻撃に有効なの?

    HTTP通信は暗号化されていない平文での通信を行うため、通信内容の傍受や改ざんによって意図しないサイトへのリダイレクトさせるなどのセキュリティーリスクが存在する。

    HTTPS通信はTLS/SSLによって暗号化されているため、通信内容の傍受が行われても内容の解読ができなくなる。

    HTTPからHTTPS通信に変更し暗号化された通信になり中間者攻撃(MITM)を防ぐことに役立つ。

    HSTSの設定方法

    調べたところ、設定方法は環境によって異なるようだった。

    私のプロジェクトだとSpringで開発をこなっているため、Spring Securityのリファレンスを確認するとデフォルトで設定されているようだった。

    デフォルトの設定内容

    1Strict-Transport-Security: max-age=31536000 ; includeSubDomains

    max-ageに値を設定することで、指定された秒数だけ当該ドメインに対してHSTSが有効になる。

    今回は1年間有効にしたいのでデフォルトのままでOK。

    includeSubDomainsはオプションで、これを設定すると該当のドメインだけではなくサブドメインにもHTSTSが有効になる。

    今回はなくても問題ないが、デフォルトのまま。

    HSTSがヘッダーに表示されない原因

    デフォルトで設定されているのに指摘を受け、ヘッダーを確認すると確かに設定されてない。。。悩んだ。

    原因は、AWS ALBを利用していること。ALBはカスタムヘッダーを付与することができないらしい。

    そのため、HSTSが付与されておらず指摘を受けてしまったようだった。

    解決方法としては、ALBにこのリクエストはHTTPSで行われていることを伝えれば良いためその設定を行う。

    yamlファイルに下記の内容を追加するだけ。

    1server:
    2  tomcat:
    3    remoteip:
    4      remote-ip-header: "x-forwarded-for"
    5      protocol-header: "x-forwarded-proto"

    この設定をすることでALBはIPとプロトコルを判断することができるようになりました。

    HSTSが設定されてるか確認

    Chromeで開く場合だが、右クリ→検証→ページ更新→NetWork→Headersと進むと確認ができる。

    AppleのHPを調べてみる。

    Strict-Transport-Security:max-age=31536000; includeSubdomains; preload

    の記載がありしっかり設定されていた。

    ついでなので弊社のこのブログはどうなっているのか確認した。

    Strict-Transport-Security の記述がない!?設定されてないない?

    でもHTTPでアクセスしてもHTTPSに変わるなぁ🤔というわけで、作った人に聞いた。

    すると、AWSのALBとEC2を利用していて構築していた。実際にどういった形で構築しているのかなどの説明を受けて納得。

    HTTPでのアクセス経路は、ブラウザ→80(HTTP)→ALB→301(Redirect)→ブラウザ→443(HTTPS)→ALB→80(HTTP)→EC2 ってことらしい。

    同じHTTPをHTTPSに設定する方法がいくつもあるみたい。

    まとめ

    携わてるプロジェクトで利用するためHSTS(HTTP Strict Transport Security)について学習しまとめました。

    HSTSはHTTPをHTTPSに強制する仕組みであり、設定することで中間者攻撃に情報を抜かれる可能性を減らすことができることがわかった。

    HSTSを設定しなくてもHTSTSの仕組みは他の方法でも実現できる。

    一応現プロジェクトでもHSTSは設定したが、このブログと同じくALBルール作成してるので特に問題はないはず。。。

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    たかやん(エンジニア)
    たかやん(エンジニア)
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background