投稿

10月, 2025の投稿を表示しています

脆弱性評価システムを作る〜CWE〜

週間・脆弱性評価システムを作ろう〜CWEとは〜 前回に引き続いて脆弱性情報についてです。今回はCWEについてまとめました。 ソースは引き続きIPAとChatGPTとなります。 CWE(Common Weakness Enumeration) 共通脆弱性タイプ一覧CWE(Common Weakness Enumeration)は、ソフトウェアにおけるセキュリティ上の弱点(脆弱性)の種類を識別するための共通の基準を目指しています。 1999年頃から米国政府の支援を受けた非営利団体のMITREが中心となり仕様策定が行われ、2006年3月に最初の原案が公開されました。その後、40を超えるベンダーや研究機関が協力して仕様改善や内容拡充が行われ、2008年9月9日にCWEバージョン1.0が公開されました。 CWEでは、SQLインジェクション、クロスサイト・スクリプティング、バッファオーバーフローなど、多種多様にわたるソフトウェアの脆弱性を識別するための、脆弱性の種類(脆弱性タイプ)の一覧を体系化して提供しています。CWEを用いると、ソフトウェア開発者やセキュリティ専門家などに次のようなメリットがあります。 ソフトウェアのアーキテクチャ、デザイン、コードに内在する脆弱性に関して、共通の言葉で議論できるようになる。 脆弱性検査ツールなど、ソフトウェアのセキュリティを向上させるための、ツールの標準の評価尺度として使用できる。 脆弱性の原因を認識し、脆弱性の低減を行い、再発を防止するための共通の基準として活用できる。 現在、CWEは、NISTのNVD、OWASPのTop Ten Projectや、いくつかのセキュリティベンダーなどで実際に活用されています。 CWEにはCWE互換認定の制度があり、脆弱性検査ツールや脆弱性対策情報提供サービス等がCWE識別子の正確な表示、CWE識別子による情報の検索などの機能要件を満たし、MITRE社へ申請するとCWE互換認定が受けられます。CWE互換認定を受けると、MITRE社のウェブサイトで紹介される、CWEのロゴが使用できる等のメリットがあります。 CW...

脆弱性評価システムを作る〜CPEとは〜

週間・脆弱性評価システムを作ろう〜CPEとは〜 前回に引き続いて脆弱性情報についてです。今回はCPEについてまとめました。 ソースは引き続きIPAとChatGPTとなります。 CPE(Common Platform Enumeration)の目的 共通プラットフォーム一覧CPE(Common Platform Enumeration)は、情報システムを構成する、ハードウェア、ソフトウェアなどを識別するための共通の名称基準を目指しています。 CPEは、米国政府が推進している情報セキュリティにかかわる技術面での自動化と標準化を実現する技術仕様SCAP(Security Content Automation Protocol)の構成要素のひとつです。 米国政府の支援を受けた非営利団体のMITRE社が中心となり仕様策定を進めており、2007年1月30日に最初の原案であるCPEバージョン1.0が公開されました。 その後、米国の脆弱性対策データベースであるNISTのNVD、米国政府のデスクトップ基準であるFDCC(Federal Desktop Core Configuration)での適用を通して、仕様改善が行われ、2008年1月31日にCPEバージョン2.1が公開されました。 CPEでは、ハードウェア、オペレーティングシステム、アプリケーションなどのプラットフォームを識別するための、構造化された名称体系を規定しています。また、規定に沿ってプラットフォームに付与した名称一覧がCPE Dictionaryとして、2008年4月15日にNISTから公開されました。 CPEを用いると、ベンダ、セキュリティ専門家、管理者、ユーザ等の間で、脆弱性の存在する対象となるプラットフォームを共通の言葉で議論できるようになります。また、情報システムの資産管理への適用など、情報システムの全般の管理にも役立てることができます。 CPE名 CPE名は、ハードウェア、オペレーティングシステム、アプリケーションなどのプラットフォームを識別するため名称です。このCPE名には2つの特徴があります。 ひとつ目は名称...

【Python】CLIコマンドライクな引数処理を行う

CLIコマンドライクな引数処理を行う 語彙力が死亡していますが、pythonで作成したバッチプログラムに引数を与えて、コンフィグファイルを編集できるようにしました。> コードはこんな感じです。 # 定数定義 COND_DAY:str = "day" COND_WEEK:str = "week" COND_MONTH:str = "month" COND_YEAR:str = "year" COND_NONE:str = "none" # コンディション一覧を初期化 self.lstCond = [self.COND_DAY, self.COND_WEEK, self.COND_MONTH, self.COND_NONE] parser = argparse.ArgumentParser(description="脆弱性評価管理システム") # オプションを定義 parser.add_argument(self.PARAM_SEARCH_COND, choices=self.lstCond, required=False, help="検索対象期間") parser.add_argument(self.PARAM_LOG_DIR, required=False, help="ログファイルの保管場所") # searchcond が指定されている場合 if args.searchcond != None: isUpdateConfupdate = True # 検索対象期間を指定 if args.searchcond == self.COND_DAY: self.confData[CVSSCommonFunction.CONF_KEY_CONDITIONDATE] = CVSSCommonFunction.CONF_SEARCH_COND_DAY elif args.searchcond == self.COND_WEEK: ...

脆弱性評価システムを作る〜CVSSとは〜

週間・脆弱性評価システムを作ろう〜CVSSとは〜 前回に引き続いて脆弱性情報についてです。今回はCVSSについてまとめました。 ソースは引き続きIPAとChatGPTとなります。 CVSS ( Common Vulnerability Scoring System) とは 共通脆弱性評価システム CVSS ( Common Vulnerability Scoring System) は、情報システムの脆弱性に対するオープンで包括的、汎用的な評価手法の確立と普及を目指し、米国家インフラストラクチャ諮問委員会( NIAC: National Infrastructure Advisory Council )のプロジェクトで 2004年10月に原案が作成されました。 その後、CVSSの管理母体として FIRST(Forum of Incident Response and Security Teams)が選ばれ、FIRSTのCVSS-SIG(Special Interest Group)で適用推進や仕様改善が行われており、2005年6月にCVSS v1が、2007年6月にCVSS v2が公開されました。 CVSS は、情報システムの脆弱性に対するオープンで汎用的な評価手法であり、ベンダーに依存しない共通の評価方法を提供しています。CVSSを用いると、脆弱性の深刻度を同一の基準の下で定量的に比較できるようになります。また、ベンダー、セキュリティ専門家、管理者、ユーザ等の間で、脆弱性に関して共通の言葉で議論できるようになります。 CVSSでは次の3つの基準で脆弱性を評価します。 CVSSの目的 標準化された評価   ベンダーごとに異なっていた脆弱性の深刻度表現を標準化し、共通の尺度で評価します。 定量的な評価   脆弱性の深刻度を0.0から10.0の数値で定量的に表現し、比較可能にします。 共通の言語   セキュリティ担当者、ベンダー、ユーザーな...

脆弱性評価システムを作る〜CVEとは〜

週間・脆弱性評価システムを作ろう〜CVEとは〜 諸所事情があり、端末やサーバーにインストールされ値得るソフトウェアについて、公開済されている脆弱性情報を取得し、一覧ファイル化するシステムを作ることになりました。 CVE、CPEなどの情報を提供しているサイトから取得し、ローカルデータベースへタンキング→導入済み製品のデータベースと付き合わせして脆弱性があればその情報をExcelファイルで一覧表示する仕組みです。 HTML化も考えたのですが、100件ずつ表示して次のページのリンクつけて、、、とかやるのがちょっと面倒なのでやめました。 まずは、脆弱性情報はどのような情報があり、どこから取得できるのかの調査を...と言いたいところなのですが、そこは手癖の悪い私のことで、Rest APIで情報をダウンロードして、その情報をExcelファイル化するところまでは完成しております。 ということで、後付けになってしまうのですが正しい知識を身につけるべくあらためて勉強を開始しました。 脆弱性情報は、CVE、CPE、CWE および CVSSという情報によって構成されています。 それぞれの正式名称と概要についてまとめていきます。大体は、IPAおよびChatGPtから取得させていただいた情報となっております。 CVE(Common Vulnerabilities and Exposures) 共通脆弱性識別子CVE(Common Vulnerabilities and Exposures)は、個別製品中の脆弱性を対象として、米国政府の支援を受けた非営利団体のMITRE社が採番している識別子です。脆弱性検査ツールや脆弱性対策情報提供サービスの多くがCVEを利用しています。 個別製品中の脆弱性に一意の識別番号「CVE識別番号(CVE-ID)」を付与することにより、組織Aの発行する脆弱性対策情報と、組織Xの発行する脆弱性対策情報とが同じ脆弱性に関する対策情報であることを判断したり、対策情報同士の相互参照や関連付けに利用したりできます。 CVE識別番号(CVE-ID)...

sqlite3のデータベースを作る

sqlite3のデータベースを作る 脆弱性管理システムを作っている中でいままでMySQLを使用していましたが、簡易的なデモを行えるようにsqLite3も使用できるように機能追加することにしました。 2025/10/18 にテストを行いプログラム修正を行なった箇所、知見を得たものがあるためフィードバックします。 sqlite3の入手 私のmacには半年前くらいにChatbotを作った際にインストールしたsqlite3がいたのでそのまま使えましたが、一応プラットフォーム別の導入方法を記載します。 #macOSの場合 brew install sqlite #Ubuntu / Debianの場合(後日、RasberryPiにも導入するので大事) sudo apt install sqlite3 #Windowsの場合 公式サイトからダウンロード: 👉 https://www.sqlite.org/download.html 「sqlite-tools」パッケージを展開し、 sqlite3.exe を任意のフォルダに置いてPATHを通します。 CLIでデータベースを作成する データベースとテーブルは環境構築の一環としてCLIから手動作成します。 データベースを作成したいディレクトリに移動して以下のコマンドを実行します。 $ sqlite3 NVD_DB.db # データベースが作成されていることを確認。 ls -l -rw-r--r-- 1 ユーザー名 staff 237568 10 13 16:44 NVD_DB.db テーブルを作成する まず、Create Table 文を書いたsqlファイルを作成します。 サンプルとして、1テーブルだけ抜粋します。 こちらがsqlite3用のCreate文です。 -- テーブルを作成する -- CVE情報 --...

【Python】pandasで取得したDataFrameのデータに対して、特定文字が含まれるかのチェックを行う

pandasで取得したDataFrameのデータに対して、特定文字が含まれるかのチェックを行う Excelファイル形式のデータをpandasライブラリを読み込み、データの中に特定の文字列を含むかどうかをチェックする方法について調べました(ChatGPTが) 列単位でチェックする方法 単純に、特定の列のデータに対して文字列を含むかどうかを調べたいだけであれば isin を使うのが最も手っ取り早そうです。 # 例:Excelの中身(df) # name city # 0 Alice Tokyo # 1 Bob Osaka # 2 Charlie Nagoya # 比較したいリスト check_list = ["Tokyo", "Osaka", "Fukuoka"] # サンプルコード df["city"].isin(check_list) # 実行結果 0 True 1 True 2 False Name: city, dtype: bool isinを使うことで、行ごとに文字を含むかどうかの真偽値が返却されます。 1セルごとにチェックする方法 今回は某アプリケーションのアウトプットを想定して、アプリケーション名に含まれているベンダー名、製品名、バージョンを取得して、不足している列の情報を保管したかったことから、1セル単位でチェックをすることにしました。 理想のインプットは、ベンダー名、製品名、バージョンが全て補完されているデータなのですが、某製品は情報にばらつきがあり、アプリケーション名という項目にベンダー名+製品名+バージョンみたいなデータ管理がされているデータもあり、そのようなケースにおいてアプリケーション名から可能な限り先の情報を取得することが目的です。 某アプリケーションの詮索はやめてください(笑 # 製品情報一覧...