ソフトウェアテスト
コード監査
静的コード分析
コーディング時という開発の早い段階でエラーを検出できるため、バグ修正コストを抑制できる。
プロジェクトの共通のコーディングスタイルを推進できるため、コードの可読性や保守性が向上する。
ツールによって自動化しやすいため、導入が比較的容易。
開発者が良いコーディングスタイルを意識するようになる。ベテランの開発者が暗黙のうちに身につけている良いコーディング習慣を経験のない開発者も自然に習得できる。
目視によるレビューの効果を高められる。レビューの前に、機械的に指摘できるエラーを摘み取ることが可能なので、レビューでは設計などの高度な問題に集中できる。
https://www.techmatrix.co.jp/t/quality/static-analysis.html
静的分析ツール
静的解析は、ソフトウェアの解析手法の一種で、コードを実行せずに行なう検証のことです。静的解析の利点として、コーディング時という開発の早い段階でエラーを検出できるため、バグ修正コストを抑制できます。また、プロジェクトの共通のコーディングスタイルを推進できるため、コードの可読性や保守性が向上するなどの利点があります。
http://www.techmatrix.co.jp/product/ctest/staticanalysis/index.html
回帰テスト
回帰テスト (かいきテスト、英: regression testing) とは、前にテストしたソフトウェアが変更後もまだ動作するかどうかを、機能テストと非機能テストを再度実行して確認する作業のこと[1]。退行テスト、リグレッションテストとも呼ばれる。そうでない場合、それは先祖返りと呼ばれる。回帰テストが必要になる可能性のある変更には、バグ修正、ソフトウェアの機能強化、構成変更、さらには電子部品の置き換えなどある[2]。 リグレッションをテストするための仕組みは、欠陥が見つかるたびに大きくなる傾向があるため、通常はテストの自動化でカバーされる。テストするためのテストケースを決定するために、変更影響分析を実行することもある(非回帰分析[3] )。
ミューテーションテスト
この手法を活用し、ソースコードに対して作為的にエラーコードを入れることで品質を見える化するテスト手法を、ミューテーションテストと呼びます。
https://sqripts.com/2022/08/31/20010/#:~:text=%E3%83%9F%E3%83%A5%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A7%A3%E6%9E%90(mutation%20analysis),-%E3%83%86%E3%82%B9%E3%83%88%E3%82%B9%E3%82%A4%E3%83%BC%E3%83%88%E3%81%AE&text=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E3%82%8F%E3%81%9A%E3%81%8B%E3%81%AA%E5%A4%89%E5%BD%A2,%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%86%E3%82%B9%E3%83%88%E3%81%A8%E5%91%BC%E3%81%B3%E3%81%BE%E3%81%99%E3%80%82
ブラックボックス
総当たりツール
ファジング
ファジング・テストの基本前提は、不具合を特定するために意図的に不正な入力をシステムに与えることです。ファザーには、主に3つのコンポーネント (不正な入力またはテストケースを作成するポエット、ターゲット・ソフトウェアにテストケースを提供するクーリエ、ターゲットで障害が発生したかどうかを検出するオラクル)があります。
https://www.synopsys.com/ja-jp/glossary/what-is-fuzz-testing.html
検査対象のソフトウェアに対して,問題を起こしそうなデータを入力し,その応答や挙動を監視する手法」
https://qiita.com/verifsec/items/4d42dbe2c9a51aec87f6
入力するデータのことをfuzz(ファズ)と呼んだり,テストケースと呼んだりします.
ファザー
長い時間をかけて順番に入力するツールをファザー(fuzzer)と呼びますが,これまでに多くのファザーが公開されています.
パラメトリック
ジェネレーショナル
デリバティブ
Faganインスペクション
フェイガン(Fagan)検査とは、計画からフォローまで通したドキュメントレビューのプロセスです。
指摘を繰り返し発見することで高品質な成果物を目指すプロセスです。フェイガン検査が適切に実装されていれば、明確で正確、理解しやすい、標準に準拠したドキュメントが得られるでしょう。
Fagan検査は①計画、②概要、③準備、④視察、⑤やり直し、⑥フォローアップの6つのプロセスから成り立ちます。ステップ④の視察までは通常と同じですが、もしここでバグが見つかった場合はステップ⑤のやり直しにおいて修正した後、ステップ①からやり直しになります。
https://piedpin.com/top/2019/12/08/fagan-test/
# ツール
zzuf
ファズテストツール
https://www.itmedia.co.jp/enterprise/articles/0707/31/news015.html
Nikto
Niktoは、Perlで記述されたプラグ可能なWebサーバーおよびCGIスキャナーであり、rfpのLibWhiskerを使用して高速なセキュリティまたは情報チェックを実行します。
https://whitemarkn.com/learning-ethical-hacker/nikto/
Metasploit
セキュリティチームのためのペネトレーションテストソフトウェア
Metasploitは、コンピュータセキュリティに関するオープンソースのプロジェクトで、脆弱性、ペネトレーションテスト、侵入検知システム、シェルコードのアーカイブ、アンチフォレンジクス(コンピュータ・フォレンジクスによる解析への対抗技術)などを主な守備範囲としている。また、本プロジェクトのその成果ソフトウェアとしてよく知られるMetasploit Frameworkの省略名としてもしばしば用いられる[2]。本項では、Metasploit Frameworkを中心に説明する。
https://www.rapid7.com/ja/products/metasploit/
https://ja.wikipedia.org/wiki/Metasploit
sqlmap
SQLインジェクションの検証をします。
https://qiita.com/shyamahira/items/9f80d16c3436f9dea753
Nmap
Nmap (「Network Mapper」)は、ネットワーク調査およびセキュリティ監査を行うためのオープンソースのツールである。大規模ネットワークを高速でスキャンするように設計されているが、単一のホストに対してもまったく問題なく機能する。Nmapは生の(raw)IPパケットを用いて、ネットワーク上でどのようなホストか利用可能になっているか、これらのホストが提供しているサービス(アプリケーション名とバージョン)は何か、ホストが実行しているOS(OS名とバージョン)は何か、どのような種類のパケットフィルタ/ファイアウォールが使用されているかなど、その他数多くの特徴を斬新な方法で判別する。Nmapは、セキュリティ監査用に広く利用されているばかりでなく、ネットワーク・インベントリ(資産情報収集)、サービスのアップグレード予定管理、ホストやサービスのアップタイム(利用可能時間)の監視等の日常業務にNmapを役立てているシステム管理者やネットワーク管理者も多い。
https://nmap.org/man/ja/index.html
open
このポートでは、アプリケーションがTCPコネクションやUDPパケットをアクティブに受け入れている。多くの場合、ポートスキャンの第一の目的は、この種のポートを見つけることである。セキュリティを重視する人なら、openポートが攻撃者の通り道になることをご存知だろう。攻撃者やペンテスト実施者は、このopenポートの弱点を突こうとする一方で、管理者は正規ユーザの利用を妨げることなく、これらのポートをファイアウォールで閉じたり防御したりしようとする。また、Openポートを見ると、ネットワーク上で利用可能なサービスが何かわかるので、セキュリティスキャン以外でも興味を引かれるポートである。
closed
closed(閉じた)ポートは、アクセス可能(Nmapのプローブパケットを受信したり応答したりする)だが、そこで受信待機しているアプリケーションはない。この種のポートは、あるIPアドレスでホストが稼動中であることを確認する場合(ホスト発見やpingスキャン)や、OS検出の一環として役に立つ場合もある。closedポートは到達可能なので、後にその一部が開放された場合は、スキャンの対象になる可能性がある。管理者がこの種のポートもファイアウォールでブロックすることを検討する場合もあるだろう。そうなると、これらは次で述べるfiltered(フィルタあり)状態として見えるようになる。
filtered
Nmapは、このポートが開いているかどうかを判別できない。なぜなら、パケットフィルタのせいで、プローブがポートまで到達できないからである。このフィルタ処理は、ファイアウォール専用機器、ルータのルール、ホストベースのファイアウォールソフトなどで実行できる。これらのポートからは情報がほとんど得られないので、攻撃者の企てを阻むことになる。場合によっては、タイプ3コード13(destination unreachable(宛先到達不能):通信が管理上の理由で禁止されている)などのICMPエラーメッセージを返すこともあるが、応答しないでプローブを破棄するだけのフィルタのほうがはるかに多く使われるようになっている。この場合、Nmapは、プローブが破棄されたのはフィルタリングではなくてネットワークの混雑のせいと見なして、再試行を数回行わざるを得なくなるので、スキャンの進行速度が格段に落ちる。
unfiltered
unfiltered状態とは、ポートにはアクセス可能だが、そのポートが開いているか閉じているかをNmapでは判別できないことを意味する。ポートをこの状態に分類できるのは、ファイアウォールルールを解読するのに使われるACKスキャンだけである。unfilteredポートのスキャンをその他のスキャンタイプ、例えばWindowスキャン、SYNスキャン、FINスキャンなどで行うと、ポートが開いているかどうかを決めるのに役立つ場合もある。
open|filtered
Nmapがポートをこの状態に分類するのは、対象のポートが開いているかフィルタ処理されているかを判別できない場合である。openポートからの応答がないタイプのスキャンには、こうしたケースが発生する。また、応答がないことは、プローブやそれが引き出した応答をパケットフィルタが破棄したことを意味する場合もある。そのためNmapは、対象のポートがopenなのかfilteredなのかを確実に見分けることができない。UDP、IP プロトコル、FIN、Null、Xmasなどのスキャンは、ポートをこの状態に分類する。
closed|filtered
この状態は、ポートが閉じているかフィルタ処理されているかを、Nmapが判断できない場合に用いられる。IPID Idleスキャンにのみ使用される。
https://nmap.org/man/ja/man-port-scanning-basics.html
OpenVPS
MBSA
Microsoft Baseline Security Analyzer(MBSA)
https://atmarkit.itmedia.co.jp/ait/articles/2103/10/news012.html
Nessus
マルチプラットフォーム対応の脆弱性スキャナ「Nessus」
Nessusは指定したサーバーに対しポートスキャンや擬似的なアクセスなどを行うことで、サーバーに存在する脆弱性を調査するツールだ。対象とするサーバーが使用しているソフトウェアに既知の脆弱性がないかどうかを調査できるほか、設定ミスや脆弱なパスワードの存在なども確認できる。また、さまざまな形式で詳細なレポートを生成できるのも特徴だ。WindowsおよびMac OS X、Linux、FreeBSD、Solarisというマルチプラットフォームで動作する。
https://jp.tenable.com/products/nessus
https://www.toyo.co.jp/ict/products/detail/nessus.html
https://knowledge.sakura.ad.jp/356/
NIST SP 800-53A
NIST SP 800-53は、米国政府内の情報システムをより安全なものにし、効果的にリスク管理するためのガイドラインです。
情報システムと組織におけるセキュリティとプライバシーのコントロールの評価
https://www.manageengine.jp/solutions/nist_publications/nist_SP800-53/lp/
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2022/01/post-33d93e.html
仕様
メカニズム
アクティビティ
個人
NIST SP 800-12
An Introduction to Information Security
NIST SP 800-34
Contingency Planning Guide for Federal Information Systems
NIST SP 800-86
Guide to Integrating Forensic Techniques into Incident Response
NIST SP 800-137
Information Security Continuous Monitoring (ISCM) for Federal Information Systems and Organizations
https://csrc.nist.gov/publications/sp800
https://www.ipa.go.jp/security/reports/oversea/nist/about.html
ペネトレーションテスト
クリスタルボックスペネトレーションテスト
ホワイトボックステストとも呼ばれる
グレーボックスペネトレーションテスト
ユーザの視点からテストするが、ソースコードにアクセスできる
ブラックボックスペネトレーションテスト
ユーザの視点からテストする。現実性の検証
ホワイトボックスペネトレーションテスト
開発者の視点からテストする。有効性の検証
スキャン
TCP接続スキャン
ターゲットに対して3ウェイハンドシェイクを行ない、成功したらポートが生きていると判断する方法。
古くから行なわれている方法で、スキャンすることによりターゲットコンピューターにおいてTCP接続が確立するため、ログに残るなど、検知されやすい。
https://www.wdic.org/w/WDIC/TCP%E6%8E%A5%E7%B6%9A%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3
TCP SYNスキャン
ターゲットに対してSYNパケットを送ると、それに対応してSYN+ACK(ポートが開いている)またはRST+ACK(ポートが開いていない)が帰ってくる。
SYN+ACKの応答としてターゲットにRST+ACKを送ると、コネクションが確立されないので相手がログに残さない場合が多い。この方法でポートスキャンを行なうこと。
https://www.wdic.org/w/WDIC/TCP%20SYN%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3
UDPスキャン
ICMPスキャン
OVAL
Open Vulnerability and Assessment Language:セキュリティ検査言語
システムの設定値やバージョンを自動で検査し、報告できるようにするための仕様言語です。
https://poota.net/archives/917
https://atmarkit.itmedia.co.jp/ait/articles/1810/18/news008_2.html
XCCDF
eXtensible Checklist Configuration Description Format:拡張可能な構成チェックリスト記述形式
セキュリティチェックリストに関し、システムの設定や基準値などをドキュメントにする際に使用する仕様言語です。
https://poota.net/archives/917
CVE
Common Vulnerabilities and Exposure:共通脆弱性識別子
CVE-2023-XXのような形をしていて、脆弱性を一意に識別することができます。
https://poota.net/archives/917
CCE
CCE(Common Configuration Enumeration:共通セキュリティ設定一覧)
CCEは、コンピュータのセキュリティ設定項目にユニークなIDを割り振るための仕様です。「設定上のセキュリティの問題」を確認、解決するために定められました。
https://atmarkit.itmedia.co.jp/ait/articles/1809/05/news014_2.html
CPE
Common Platform Enumeration:共通プラットフォームタイプ
ハードウェア、ソフトウェア、OS等のクラス(種類)を記述および識別することができます。
https://poota.net/archives/917
CWE
CWE (Common Weakness Enumeration) - 共通脆弱性タイプ一覧
脆弱性を種類別(どういう領域の脆弱性なのか)に分類した指標。
CVE, CVSSの補足情報としての位置づけ。現時点(2016/12)で全てのCVEに対してCWE IDが付与されているわけではない。
https://itguy.hatenablog.jp/entry/2017/10/05/184918