OWASP TOP 10のトップ3を解説

gray steel chain locked on gate Security

概要

  • OWASPが発表している最新のWeb攻撃手法のことです。2017年時点の内容ですが、2020年時点でもこれらの攻撃手法は現役です。
  • “Top 10 Web Application Security Risks”。通称は OWASP Top 10
  • Web SecurityなのでOSI参照レイヤーではレイヤー5から7の話題です。
https://www.infraexpert.com/study/tcpip.html

OWASP Top 10 一覧

  1. Injection
  2. Broken Authentication
  3. Sensitive Data Exposure
  4. XML External Entities (XXE)
  5. Broken Access Control
  6. Security Misconfiguration
  7. Cross-Site Scripting XSS.
  8. Insecure Deserialization
  9. Using Components with Known Vulnerabilities.
  10. Insufficient Logging & Monitoring.

各項目の説明

1. Injection

Injection flaws, such as SQL, NoSQL, OS, and LDAP injection, occur when untrusted data is sent to an interpreter as part of a command or query. The attacker’s hostile data can trick the interpreter into executing unintended commands or accessing data without proper authorization.

訳:SQL、NoSQL、OS、LDAP インジェクションなどの欠陥は、信頼できないデータがコマンドやクエリの一部としてインタープリタに送信された場合に発生します。攻撃者が送信する不正なデータは、インタープリタを騙して意図しないコマンドを実行したり、適切な権限を持たずにデータにアクセスしたりします。

原因は、Webのフォームやパラメーターのユーザからの入力データを適切に処理していないときに発生。

脆弱性を含むコードの例

odbc.execute('SELECT id FROM users WHERE email = {email} AND password = {password}', email: params["email"}, password: params["password"])

emailに"" OR 1 ORというパラメータが入っていたらすべての認証が通る。以下に例。

SELECT id FROM users WHERE email = "" OR 1 OR 1 AND password = ""'

防ぎ方:静的コード解析(Code sniffer)、コードレビュー、WAF、IDS/IPS

漏洩事例:SQLインジェクション攻撃で個人情報約6万4千件が流出、株式会社釣りビジョン

2. Broken Authentication.

Application functions related to authentication and session management are often implemented incorrectly, allowing attackers to compromise passwords, keys, or session tokens, or to exploit other implementation flaws to assume other users’ identities temporarily or permanently.

訳:認証とセッション管理に関連したアプリケーション機能は、しばしば誤った実装をされており、攻撃者はパスワード、キー、セッショントークンを漏洩させたり、他の実装の欠陥を悪用して、一時的または恒久的に他のユーザの認証を不正に入手できます。

原因は、経路が暗号化されていなかったり、URLに認証に使っているセッションIDを露出してしまったりして第三者が認証に使っているキーを手に入れてしまう場合に発生します。

容易にあるケースは、暗号化されていないWiFiアクセスポイントやWEP(脆弱な暗号アルゴリズム)で暗号化されているアクセスポイントでTLSで暗号化されていないサイトにログインする場合。信頼できないVPNやProxyサーバを通したときに漏洩します。

例:とあるサイトでの認証キー

認証されたキーの例

防ぎ方:ペネトレーションテスト、コードレビュー、WAF、IDS/IPS。

3. Sensitive Data Exposure.

Many web applications and APIs do not properly protect sensitive data, such as financial, healthcare, and PII. Attackers may steal or modify such weakly protected data to conduct credit card fraud, identity theft, or other crimes. Sensitive data may be compromised without extra protection, such as encryption at rest or in transit, and requires special precautions when exchanged with the browser.

訳:多くのWebアプリケーションやAPIは、金融、医療、PII(Personally Identifiable Information)などの機密データを適切に保護していません。攻撃者は、このような弱く保護されたデータを盗んだり、変更したりして、クレジットカード詐欺や個人情報の窃盗、その他の犯罪を行う可能性があります。機密性の高いデータは、永続データや転送中の暗号化など、より踏み込んだ保護がなければ危険にさらされる可能性があり、ブラウザとのやり取りの際には特別な注意が必要となります。

原因は、適切に転送するデータや保存するデータの暗号化を行っていないことです。

漏洩を防ぐためには、適切な隠蔽が必要になります。クレカ情報を生データで保存することはPCI DSSで禁止されており暗号化が必須です。パスワードの保存に関しては不可逆のハッシュで保存したり、saltという文字列を混ぜることで復元を困難にします。

防ぎ方:設計レビュー、ログ解析、コードレビュー、WAF、IDS/IPS

考察

  • ちゃんと書き出したらキリが無いのでトップ3だけにします。
  • 対処方法が似たりよったりということに気づいたと思います。Web Securityに関しては、100%絶対防げるという手法が存在しません。なぜならレイヤーが高めなので機械では正常なのか異常なのかが区別が付きづらいケースがあるためです。
  • 脆弱性が起きる勘所を押さえて、できるだけ低レイヤーな部分からセキュアなコーディングをしていくのが良いです。
  • OWASP Top10はコードレビュアーやシステムの設計者をする人は最低限知らなければいけない内容です。セキュリティを知らなくても正常系は動いてしまうので軽視しがちです。

コメント