0.はじめに
Webアプリを作って公開して終わり、ではなく、安全に運用し続けるためにはどうすればよいか。
調べた結果をまとめたいと思います。
先日、とあるWebアプリを個人で開発し、AWSにデプロイしました。
インターネット上にWebアプリを自作して公開する資料が多数あり、参考にしていたところです。
しかし、セキュリティ面の対策について併記されている資料ばかりではなかったため、
最低限、注意しておくべきことを以下にまとめます。
1.SSHのポートについて
EC2にRemoteSSHを利用してアクセスし、EC2上のデータを編集するというやり方が多く公開されています。
SSHの利用には22番ポートをAWS上で使えるようにする必要がありますが、
ここでインバウンドルールを 「0.0.0.0/0」にするのは危険な行為です。
上のような設定は、正当な理由なくやらないでください。
いくらSSHでのアクセスにはキーペアが必要とはいえ、ランダムに生成されたIPアドレスや鍵がたまたま当たってしまってログインされたらアウトです。Web改ざんのリスクが発生することになります。
したがって、SSHでアクセスする場合は、「マイIP」を利用して、自身のIPアドレスだけからアクセス可能にするか
「カスタム」を使ってSSHを使えるIPアドレスを制限すべきと思います。
2.不審なリクエストは普通に飛んできます
WAF(Web Application Firewall)などを使用しない限り(あるいは使ったとしても)、変なアクセスが当たり前のように来るものだと思ってください。インターネット上、すなわち公衆の回線の上にあるのですから、何でも来るものだという認識が必要です。
不審なアクセスの例
- ログインページを作成していないのに、ログインページのヘッダーを取得するリクエストが送られてくる。
私はログインページのようなサービスは作らなかったのですが、このようなリクエストは日常的にやってきます。
- 存在しないAPIに対するリクエスト
上の図のような構造のソフトウェアを組んだ場合、バックエンド側でapiに関連する何らかの処理を行って
フロントエンドに返答をすることになります。
ところが実際にサービスを公開すると、定義されていないようなAPIを指定するリクエストが日常的に飛んできます。
もちろんファイアウォールで対策すべきとは思いますが、サイバー攻撃というのは未知のものもあるため、それだけで防ぎきれるかどうかは分かりません。
定義されていないapiが送られてきた場合、バックエンド側で404を返すか
何らかの例外処理を行うのが無難と思います。
実際に私の公開しているサービスにはこのようなリクエストが送られてきました。
また、apiやリクエストパラメータの中身を使ってwebページの中身を書き換えるような処理や、SQLデータベースに触れるような処理をしたいという場合は、このような不正なリクエストによってトラブルが発生しないよう、ソースコード側も含めて対策が必要です。
- その他
この記事にあるようなリクエストがよく飛んでくる印象を受けます。
https://qiita.com/comefigo/items/e9b1bce93c1b615e5934
いずれにしても、自身のサービスで規定していないリクエストは日常的にやってきます。
これらのリクエストは、応答しないか、404を返すようにすべきだと思います。
3.パブリックIPアドレスは普通にアクセスできる
特に何か対策しない限り、パブリックIPアドレスには自分の公開したサービスがそのまま表示されます。
パブリックIPアドレスにアクセスされた場合、自分の設定したドメインにリダイレクトさせるなど
追加の設定を行うのが一般的です。
やり方はこちらが参考になります。
https://insource-mkd.co.jp/staff-blog/10662/
4.おわりに
私自身仕事ではオンプレミスしかやってないのですが、アプリケーションの構成に関わらず
上の3つについては共通して注意が必要と感じます。
これに限らず、セキュリティ面などで気を付けるべきことはたくさんあると思います。
安全性をしっかりと検証したうえで、取り入れることをお勧めいたします。
以上です。