利用openVuln API自动化查询思科产品漏洞
利用openVuln API自動化查詢思科產品漏洞
B站視頻鏈接:??https://www.bilibili.com/video/BV1ZG411P7cf/?spm_id_from=333.999.0.0??- 一、背景
- 二、Cisco PSIRT openVuln API 簡介
- 三、獲取思科openVuln API訪問憑證
- 四、測試訪問openVuln API
- 4.1 通過Postman軟件測試
- 4.2 通過Terminal運行測試
- 4.3 將OpenVulnQuery做為庫(Library)測試
- 五、Python最終代碼
- 5.1 使用openVulnQuery API 2.0
- 5.2 Python查詢思路
- 5.3 Python 最終代碼
- 六、運行代碼可能遇見的報錯
- 七、參考文檔
一、背景
安全自動化是目前一個比較熱門的話題,網絡安全問題往往是由軟件自身的安全漏洞被利用導致,所以及時修復已知安全漏洞,是抵御網絡攻擊非常重要的一環。這個文檔介紹一下,如何利用思科openVuln API,自動化的查詢特定思科產品的安全漏洞,并且通過Excel的方式展現這些漏洞信息。
先看一下最后代碼輸出的Excel截圖,代碼可以根據提供的軟件版本、CVE編號、產品名稱來查詢漏洞信息,每次查詢的漏洞信息會存儲為一個CSV文件,最后將所有的CSV信息合并到一個Excel文件中,每個Excel Sheet就是一個CSV文件中的信息,Excel列寬會根據內容自動調整。
除了利用API的方式查詢,另外也可以通過思科提供的圖形化界面來查詢漏洞信息,可以登錄https://tools.cisco.com/security/center/publicationListing.x網站查詢思科設備的漏洞信息。
也可以查詢特定版本的漏洞信息,鏈接:https://tools.cisco.com/security/center/softwarechecker.x
例如這里查詢IOS 15.2(7)E2的漏洞信息。
二、Cisco PSIRT openVuln API 簡介
思科產品安全事件響應小組(Cisco Product Security Incident Response Team,PSIRT)是一個專門的全球團隊,負責接收、調查和公開報告與思科產品和網絡有關的安全漏洞信息 [1]。
思科PSIRT團隊提供了openVuln API[2],允許用戶查詢思科產品的漏洞信息,漏洞信息支持多種格式的行業安全標準:
CVE:通用漏洞枚舉(Common Vulnerability Enumeration),它就像是所有公開漏洞的字典表,對已公開的漏洞進行統一編號。由Mitre公司(非盈利機構)建立與維護,網址:https://cve.org/
CWE:常見弱點枚舉 (Common Weakness Enumeration) 是MITRE公司繼CVE之后的又一個安全漏洞詞典,主要針對開發社區和安全從業人員社區,列出了架構、設計、代碼或實施中可能出現的常見軟件和硬件弱點,這些弱點可能導致可利用的安全漏洞 [3] ,網址:https://cwe.mitre.org
CVSS:通用漏洞評分系統 (Common Vulnerability Scoring System) 提供了一種評估漏洞嚴重性的方法,企業在修復漏洞時,可以根據這個優先級來修復。CVSS現在的版本是V3.1,漏洞評分為0~10分,漏洞分為4個等級:LOW(0.1~3.9)、MEDIUM(4.0~6.9)、HIGH(7.0~8.9)、CRITICAL(9.0~10.0) [4],網址:https://first.org/cvss
CSAF:通用安全咨詢框架 (Common Security Advisory Framework) 是結構化機器可讀漏洞相關咨詢的規范。CSAF 是通用漏洞報告框架 (CVRF) 的新名稱和替代品。網址:https://csaf.io/
三、獲取思科openVuln API訪問憑證
思科openVuln API使用OAuth2進行認證,所以需要認證獲得授權之后才能查詢。
登錄思科網站,創建憑證信息,網址https://apiconsole.cisco.com/apps/myapps
創建一個應用名稱,選擇OAuth2.0的憑證類型,這里我選擇客戶端憑證。
勾選Cisco PSIRT openVuln API的權限,注意這個API的速率限制,每秒5次請求,每分鐘30次請求。
創建完成。
查看產生的憑證信息,記錄這個信息,KEY:djshucbvmpu4cmcsgufwt36w,CLIENT SECRET:TVJxz72ADUBKdb7ySjTzzcQp,注意不要泄露這個憑證信息(我會在演示完后銷毀這個憑證)。
四、測試訪問openVuln API
4.1 通過Postman軟件測試
在Postman軟件中選擇配置OAuth 2.0的憑證信息,設置Token名稱,設置憑證類型為Client Credentials,令牌URL為https://cloudsso.cisco.com/as/token.oauth2,Client ID為djshucbvmpu4cmcsgufwt36w,Client Secret:TVJxz72ADUBKdb7ySjTzzcQp,填寫完信息之后,點擊產生新的Token信息,然后使用這個Token。
在軟件中發起HTTP GET請求,通過CVE信息查詢受影響的產品 [5],HTTP GET測試URL為:https://api.cisco.com/security/advisories/v2/cve/CVE-2021-44228
4.2 通過Terminal運行測試
通過pip3 install openVulnQuery安裝openVulnQuery模塊 [6]后,可以在Linux terminal使用命令行測試。
[root@centos8?~]#?pip3?install?openVulnQuery安裝之后創建一個憑證文件,輸入CLIENT_ID和CLIENT_SECRET信息。
也可以將這個憑證信息配置在環境變量中,例如:export CLIENT_ID="djshucbvmpu4cmcsgufwt36w",export CLIENT_SECRET="TVJxz72ADUBKdb7ySjTzzcQp"。
[root@centos8?~]#?vim?Credentials.json{
????"CLIENT_ID":?"djshucbvmpu4cmcsgufwt36w",
????"CLIENT_SECRET":?"TVJxz72ADUBKdb7ySjTzzcQp"
}
調用憑證信息,查詢2022年8月份所有critical級別的漏洞。
[root@centos8?~]#?openVulnQuery?--config?Credentials.json?--severity?critical?--first_published?2022-08-01:2022-08-30[
????{
????????"advisory_id":?"cisco-sa-sb-mult-vuln-CbVp4SUR",
????????"advisory_title":?"Cisco?Small?Business?RV?Series?Routers?Vulnerabilities",
????????"bug_ids":?[
????????????"CSCwb58268",
????????????"CSCwb58273",
????????????"CSCwb98961",
????????????"CSCwb98964",
????????????"CSCwc00210"
????????],
????????"cves":?[
????????????"CVE-2022-20827",
????????????"CVE-2022-20841",
????????????"CVE-2022-20842"
????????],
????????"cvrfUrl":?"https://tools.cisco.com/security/center/contentxml/CiscoSecurityAdvisory/cisco-sa-sb-mult-vuln-CbVp4SUR/cvrf/cisco-sa-sb-mult-vuln-CbVp4SUR_cvrf.xml",
????????"cvss_base_score":?"9.8",
????????"cwe":?[
????????????"CWE-120",
????????????"CWE-77",
????????????"CWE-78"
????????],
????????"first_published":?"2022-08-03T23:00:00",
????????"ips_signatures":?[
????????????"NA"
????????],
????????"last_updated":?"2022-08-03T23:00:00",
????????"product_names":?[
????????????"Cisco?Small?Business?RV?Series?Router?Firmware?"
????????],
????????"publication_url":?"https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-sb-mult-vuln-CbVp4SUR",
????????"sir":?"Critical",
????????"summary":?"<p>Multiple?vulnerabilities?in?Cisco Small?Business?RV160,?RV260,?RV340,?and?RV345?Series?Routers?could?allow?an?unauthenticated,?remote?attacker?to?execute?arbitrary?code?or?cause?a?denial?of?service?(DoS)?condition?on?an?affected?device.</p>\n<p>For?more?information?about?these?vulnerabilities,?see?the <a?href=\"#ds\">Details</a> section?of?this?advisory.</p>\n<p>Cisco has?released?software?updates?that?address?these?vulnerabilities.?There?are?no?workarounds?that?address?these?vulnerabilities.</p>\n<p>This?advisory?is?available?at?the?following?link:<br><a?href=\"https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-sb-mult-vuln-CbVp4SUR\">https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-sb-mult-vuln-CbVp4SUR</a></p>"
????}
4.3 將OpenVulnQuery做為庫(Library)測試
創建一個python測試腳本,填入client_id和client_secret。這里查詢特IOS 15.2(7)E5這個版本漏洞信息。
[root@centos8?~]#?vim?prist_demo.pyfrom?openVulnQuery?import?query_client
query_client?=?query_client.OpenVulnQueryClient(client_id="djshucbvmpu4cmcsgufwt36w",?client_secret="TVJxz72ADUBKdb7ySjTzzcQp")
advisories?=?query_client.get_by_ios(adv_format='default',?ios_version='15.2(7)E5')
for?x?in?advisories:
????print(f'advisory_id:{x.advisory_id}')
????print(f'sir:{x.sir}')
????print(f'first_published:{x.first_published}')
????print(f'last_updated:{x.last_updated}')
????print(f'cves:{x.cves}')
????print(f'bug_ids:{x.bug_ids}')
????print(f'cvss_base_score:{x.cvss_base_score}')
????print(f'advisory_title:{x.advisory_title}')
????print(f'publication_url:{x.publication_url}')
????print(f'cwe:{x.cwe}')
????#?print(f'product_names:{x.product_names}')
????#?print(f'summary:{x.summary}')
????print('-'*30)
下面是所有可以獲取的字段信息,可以根據需求自行過濾。
advisory_idadvisory_title
bug_ids
csafUrl
cves
cvrfUrl
cvss_base_score
cwe
filter
first_published
ips_signatures
last_updated
platforms
product_names
publication_url
sir
summary
運行測試腳本的輸出信息。
[root@centos8?~]#?python3?prist_demo.pyadvisory_id:cisco-sa-ssh-excpt-dos-FzOBQTnk
sir:High
first_published:2022-09-28T16:00:00
last_updated:2022-09-28T16:00:00
cves:['CVE-2022-20920']
bug_ids:['CSCvx63027']
cvss_base_score:7.7
advisory_title:Cisco?IOS?and?IOS?XE?Software?SSH?Denial?of?Service??Vulnerability
publication_url:https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-ssh-excpt-dos-FzOBQTnk
cwe:['CWE-755']
------------------------------
advisory_id:cisco-sa-ikev2-ebFrwMPr
sir:High
first_published:2021-09-22T16:00:00
last_updated:2021-09-22T16:00:00
cves:['CVE-2021-1620']
bug_ids:['CSCvw25564']
cvss_base_score:7.7
advisory_title:Cisco?IOS?and?IOS?XE?Software?IKEv2?AutoReconnect?Feature?Denial?of?Service?Vulnerability
publication_url:https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-ikev2-ebFrwMPr
cwe:['CWE-563']
------------------------------
五、Python最終代碼
5.1 使用openVulnQuery API 2.0
思科PSIRT在2022年8月1日發布了新的API接口,并通告舊的API接口將會下線。但是目前通過pip install安裝的Python庫使用的是舊API接口,如果想要在Python代碼中使用新的API接口,可以在pip install安裝模塊后,從Github下載最新的代碼,替換整個_library目錄中的所有內容。下面演示一下這個過程。
首先正常安裝openVulnQuery模塊。
[root@centos8?~]#?pip3?install?openVulnQuery安裝之后,查詢openVulnQuery模塊的安裝目錄。
[root@centos8?_library]#?find?/?-name?"advisory.py"/usr/local/lib64/python3.6/site-packages/openVulnQuery/_library/advisory.py
可以查看目錄中的config.py文件,關注最后一行的API_URL信息,新的API_URL鏈接為:API_URL = "https://api.cisco.com/security/advisories/v2"。所以可以確認通過pip install安裝的模塊,使用的是舊的API接口。
[root@centos8?_library]#?more?/usr/local/lib64/python3.6/site-packages/openVulnQuery/_library/config.py?There?are?four?prerequisites?needed?before?a?user?can?initiate?the?API?service?calls?and?obtain?access?to?the?underlying?Cisco?security?vulnerability?information
.
??-?Sign-in?with?your?CCO?ID
??-?Register?a?client?application?to?create?a?“unique?client?identifier”?that?will?identify?your?client?application?to?the?Cisco?Token?services.?Registration?crea
tes?the?client?credentials?along?with?name?assignment,?description,?and?subscribes?the?client?application?to?one?or?more?of?the?OAuth?v2.0?grant?types?requested?fo
r?their?client??application.
??-?Get?Access?Tokens?-?utilize?Cisco's?Token?services?to?acquire?an?OAuth?v2.0?access-token(s).
??-?Make?API?Calls
?Enter?your?client?ID?and?client?secret?below.
CLIENT_ID?=?""
CLIENT_SECRET?=?""
REQUEST_TOKEN_URL?=?"https://cloudsso.cisco.com/as/token.oauth2"
API_URL?=?"https://api.cisco.com/security/advisories"
從Github下載最新的代碼。
[root@centos8?~]#?git?clone?https://github.com/CiscoPSIRT/openVulnQuery.git正克隆到?'openVulnQuery'...
remote:?Enumerating?objects:?294,?done.
remote:?Counting?objects:?100%?(121/121),?done.
remote:?Compressing?objects:?100%?(94/94),?done.
remote:?Total?294?(delta?58),?reused?44?(delta?24),?pack-reused?173
接收對象中:?100%?(294/294),?152.18?KiB?|?763.00?KiB/s,?完成.
處理?delta?中:?100%?(129/129),?完成.
將Github中_library目錄的所有文件拷貝到原有的_library目錄中,并覆蓋原有文件。
cp?-r?/root/openVulnQuery/openVulnQuery/_library/?/usr/local/lib64/python3.6/site-packages/openVulnQuery/5.2 Python查詢思路
這個代碼的主要目的是:根據提供的軟件版本、CVE編號、產品名稱來查詢漏洞信息,并將所有漏洞信息整合到Excel中。
首先是根據什么信息來查詢漏洞,最準確的是根據系統加版本來查詢,可以明確的獲取當前版本的所有漏洞信息。但是可惜的是,并不是所有思科產品都支持這個查詢方式,只有下面這些系統可以通過軟件版本的方式查詢。
Cisco?IOS?Software?(ios)Cisco?IOS?XE?Software?(iosxe)
Cisco?NX-OS?Software?(nxos)
Cisco?NX-OS?Software?in?ACI?mode?(aci)
Cisco?Adaptive?Security?Appliance?(ASA)?Software?(asa)
Cisco?Firepower?Threat?Defense?(FTD)?Software?(ftd)
Cisco?Secure?Firewall?Management?Center?(FMC)?Software?(fmc)
Cisco?Firepower?eXtensible?Operating?System?(FXOS)?(fxos)
其他不支持軟件版本方式查詢的系統,可以通過產品名稱來查詢,例如WLC、ISE等。如果你想了解產品的全稱,可以訪問https://tools.cisco.com/security/center/productBoxData.x?prodType=CISCO獲取思科的所有產品名稱。
通過CVE編號查詢受影響的產品,也是一個比較實用的查詢方式。例如最近突發了一個Log4j2漏洞,已知CVE編號是CVE-2021-44228,想了解有哪些思科產品受到影響,可以通過這種方式來查詢,列出所有受到影響的產品。
查詢完成后,就是用什么樣的格式來輸出這些信息。我將每個查詢的結果生成一個CSV文件,因為CSV是一個純文本文件,所以可以直接使用文本編輯器查看。但是如果查詢很多產品的漏洞后,想在一個文件中查看,Excel是更加合適的格式。Excel可以將每個CSV文件作為一個Sheet,這樣查看起來更加清晰。所有代碼最終會輸出兩類文件,一類是基于每次查詢產生的CSV文件,一個是所有CSV合并起來的Excel文件。另外將CSV合并到Excel時,默認列的寬度默認較小,可以根據列的內容動態的來調整Excel列寬,這樣可讀性更好。
5.3 Python 最終代碼
創建一個文件夾,用于存放查詢結果的CSV文件。
[root@centos8?~]#?mkdir?cisco_vuln_csv_folder安裝這次代碼所需的Python模塊pandas,openpyxl,XlsxWriter,openVulnQuery。
注意openVulnQuery模塊已經在5.1部分替換了最新的代碼文件,使用了API 2.0接口。
[root@centos8?~]#?pip3?install?pandas?openpyxl?XlsxWriter創建Python代碼文件,請自行替換client_id和client_secret。處于安全性考慮,賬號信息可以放到另外的配置文件中來調用,這里為了簡化代碼,我直接放在源文件中了。另外這個代碼也有很多重復性的部分可以優化,這里只是給大家提供一個思路,可以根據需要自行修改。如果有想要更好的查詢方式,也歡迎聯系我 :)
import?csvimport?os
import?pandas?as?pd
client_id?=?"djshucbvmpu4cmcsgufwt36w"
client_secret?=?"TVJxz72ADUBKdb7ySjTzzcQp"
csv_folder?=?r'./cisco_vuln_csv_folder/'
def?cisco_ver_vuln_csv(ostype='ios',?version='None'):
????from?openVulnQuery?import?query_client
????query_client?=?query_client.OpenVulnQueryClient(client_id=client_id,?client_secret=client_secret)
????if?ostype?==?'ios':
????????advisories?=?query_client.get_by_ios(adv_format='default',?ios_version=version)
????elif?ostype?==?'iosxe':
????????advisories?=?query_client.get_by_ios_xe(adv_format='default',?ios_version=version)
????elif?ostype?==?'asa':
????????advisories?=?query_client.get_by_asa(adv_format='default',?asa_version=version)
????elif?ostype?==?'fmc':
????????advisories?=?query_client.get_by_fmc(adv_format='default',?fmc_version=version)
????elif?ostype?==?'ftd':
????????advisories?=?query_client.get_by_ftd(adv_format='default',?ftd_version=version)
????elif?ostype?==?'fxos':
????????advisories?=?query_client.get_by_fxos(adv_format='default',?fxos_version=version)
????else:
????????print('請輸入以下支持的OS類型:ios|iosxe|asa|fmc|ftd|fxos')
????headers?=?['advisory_title',
???????????????'sir',
???????????????'cvss_base_score',
???????????????'first_published',
???????????????'last_updated',
???????????????'publication_url',
???????????????'cves',
???????????????'advisory_id',
???????????????'bug_ids',
???????????????]
????csvfile?=?open(csv_folder?+?ostype+'_'+version+'.csv',?'w',?newline='')
????advisories_info?=?[]
????for?x?in?advisories:
????????advisories_info.append({'advisory_title':?x.advisory_title,
????????????????????????????????'sir':?x.sir,
????????????????????????????????'cvss_base_score':?x.cvss_base_score,
????????????????????????????????'first_published':?x.first_published,
????????????????????????????????'last_updated':?x.last_updated,
????????????????????????????????'publication_url':?x.publication_url,
????????????????????????????????'cves':?x.cves,
????????????????????????????????'advisory_id':?x.advisory_id,
????????????????????????????????'bug_ids':?x.bug_ids
????????????????????????????????})
????c?=?csv.DictWriter(csvfile,?fieldnames=headers)
????c.writeheader()
????c.writerows(advisories_info)
????csvfile.close()
def?cisco_product_vuln_csv(product_name='wlc'):
????from?openVulnQuery?import?query_client
????query_client?=?query_client.OpenVulnQueryClient(client_id=client_id,?client_secret=client_secret)
????advisories?=?query_client.get_by_product(adv_format='default',?product_name=product_name)
????headers?=?['advisory_title',
???????????????'sir',
???????????????'cvss_base_score',
???????????????'first_published',
???????????????'last_updated',
???????????????'publication_url',
???????????????'cves',
???????????????'advisory_id',
???????????????'bug_ids',
???????????????]
????if?product_name?==?'Cisco?Identity?Services?Engine?Software':
????????csvfile?=?open(csv_folder?+?'product_ISE.csv',?'w',?newline='')
????elif?product_name?==?'Cisco?Unified?Communications?Manager':
????????csvfile?=?open(csv_folder?+?'product_CUCM.csv',?'w',?newline='')
????else:
????????csvfile?=?open(csv_folder?+?'product'+'_'+product_name+'.csv',?'w',?newline='')
????advisories_info?=?[]
????for?x?in?advisories:
????????advisories_info.append({'advisory_title':?x.advisory_title,
????????????????????????????????'sir':?x.sir,
????????????????????????????????'cvss_base_score':?x.cvss_base_score,
????????????????????????????????'first_published':?x.first_published,
????????????????????????????????'last_updated':?x.last_updated,
????????????????????????????????'publication_url':?x.publication_url,
????????????????????????????????'cves':?x.cves,
????????????????????????????????'advisory_id':?x.advisory_id,
????????????????????????????????'bug_ids':?x.bug_ids
????????????????????????????????})
????c?=?csv.DictWriter(csvfile,?fieldnames=headers)
????c.writeheader()
????c.writerows(advisories_info)
????csvfile.close()
def?cisco_cve_vuln_csv(cve_id='CVE-2021-44228'):
????from?openVulnQuery?import?query_client
????query_client?=?query_client.OpenVulnQueryClient(client_id=client_id,?client_secret=client_secret)
????advisories?=?query_client.get_by_cve(adv_format='default',?cve_id=cve_id)
????headers?=?['advisory_title',
???????????????'sir',
???????????????'cvss_base_score',
???????????????'first_published',
???????????????'last_updated',
???????????????'publication_url',
???????????????'cves',
???????????????'advisory_id',
???????????????'bug_ids',
???????????????]
????csvfile?=?open(csv_folder?+?cve_id?+?'.csv',?'w',?newline='')
????advisories_info?=?[]
????for?x?in?advisories:
????????advisories_info.append({'advisory_title':?x.advisory_title,
????????????????????????????????'sir':?x.sir,
????????????????????????????????'cvss_base_score':?x.cvss_base_score,
????????????????????????????????'first_published':?x.first_published,
????????????????????????????????'last_updated':?x.last_updated,
????????????????????????????????'publication_url':?x.publication_url,
????????????????????????????????'cves':?x.cves,
????????????????????????????????'advisory_id':?x.advisory_id,
????????????????????????????????'bug_ids':?x.bug_ids
????????????????????????????????})
????c?=?csv.DictWriter(csvfile,?fieldnames=headers)
????c.writeheader()
????c.writerows(advisories_info)
????csvfile.close()
if?__name__?==?'__main__':
????import?time
????cisco_ver_vuln_csv(ostype='ios',?version='15.2(7)E5')
????cisco_ver_vuln_csv(ostype='iosxe',?version='17.8.1')
????cisco_ver_vuln_csv(ostype='asa',?version='9.18.1')
????cisco_ver_vuln_csv(ostype='fmc',?version='7.0.2')
????time.sleep(3)
????cisco_ver_vuln_csv(ostype='ftd',?version='7.2.0')
????cisco_ver_vuln_csv(ostype='fxos',?version='2.12.0.31')
????cisco_cve_vuln_csv(cve_id='CVE-2021-44228')
????time.sleep(3)
????cisco_product_vuln_csv(product_name='WLC')
????cisco_product_vuln_csv(product_name='Cisco?Identity?Services?Engine?Software')
????cisco_product_vuln_csv(product_name='Cisco?Unified?Communications?Manager')
????cisco_product_vuln_csv(product_name='Cisco?TelePresence')
????#?多個CSV文件合并為一個excel
????csv_folder_name?=?r"./cisco_vuln_csv_folder"
????writer?=?pd.ExcelWriter('my_cisco_vuln.xlsx')
????csv_file_list?=?os.listdir(csv_folder_name)
????for?csv_name?in?csv_file_list:
????????csv_data?=?pd.read_csv(csv_folder_name?+?'/'?+?csv_name,?encoding='UTF-8')
????????csv_data.to_excel(writer,?csv_name,?index=False)
????????df?=?pd.DataFrame(data=csv_data)
????????for?column?in?df:
????????????column_width?=?max(df[column].astype(str).map(len).max(),?len(column))
????????????col_idx?=?df.columns.get_loc(column)
????????????writer.sheets[csv_name].set_column(col_idx,?col_idx,?column_width)
????writer.save()
????print('Excel文件已經創建完成')
運行代碼測試。
[root@centos8?~]#?python3?cisco_psirt_vuln.pyExcel文件已經創建完成
查看輸出的CSV文件和Excel文件。
[root@centos8?~]#?ls?cisco_vuln_csv_folder/?asa_9.18.1.csv???ftd_7.2.0.csv???????'ios_15.2(7)E5.csv'??'product_Cisco?TelePresence.csv'???product_ISE.csv
?fmc_7.0.2.csv????fxos_2.12.0.31.csv???iosxe_17.8.1.csv?????product_CUCM.csv??????????????????product_WLC.csv
[root@centos8?~]#?ls?my_cisco_vuln.xlsx
my_cisco_vuln.xlsx
打開Excel文件查看,通過軟件版本方式的查詢結果是非常準確的,對應的軟件版本一定有這些漏洞。
通過產品名稱的方式查詢,會返回這個產品已知的所有漏洞信息,需要人工進一步的去判斷,所關注的版本是否收到影響。不過可以根據first_publishded字段查看漏洞的發布時間,如果當前運行的版本是2020年發布的,那么也沒有必要查看之前時間發布的漏洞。
六、運行代碼可能遇見的報錯
當未安裝XlsxWriter模塊時會遇見下面報錯,可以通過安裝這個模塊解決,pip3 install XlsxWriter
[root@centos8?~]#?python3?cisco_psirt_vuln.pyTraceback?(most?recent?call?last):
??File?"cisco_prist_vuln.py",?line?129,?in?<module>
????writer.sheets[csv_name].set_column(col_idx,?col_idx,?column_width)
AttributeError:?'Worksheet'?object?has?no?attribute?'set_column'
如果使用了舊的API,可能遇見下面報錯。因為通過pip install安裝的openVulnQuery模塊,使用的是舊的API,其中沒有get_by_asa這個方法。解決方法參考5.1部分,使用最新的Github代碼,代碼鏈接https://github.com/CiscoPSIRT/openVulnQuery
[root@centos8?~]#?python3?cisco_psirt_vuln.pyTraceback?(most?recent?call?last):
??File?"cisco_psirt_vuln.py",?line?105,?in?<module>
????cisco_ver_vuln_csv(ostype='asa',?version='9.18.1')
??File?"cisco_psirt_vuln.py",?line?18,?in?cisco_ver_vuln_csv
????advisories?=?query_client.get_by_asa(adv_format='default',?asa_version=version)
AttributeError:?'OpenVulnQueryClient'?object?has?no?attribute?'get_by_asa'
當網絡不穩定,或者API超過限制速率時,可能遇見下面報錯。可以嘗試更換主機的網絡環境,或者等1分鐘后再測試。API速率限制是每秒5次請求,每分鐘30次請求。
requests.exceptions.ConnectionError:?HTTPSConnectionPool(host='cloudsso.cisco.com',?port=443):?Max?retries?exceeded?with?url:?/as/token.oauth2?client_id=djshucbvmpu4cmcsgufwt36w&client_secret=TVJxz72ADUBKdb7ySjTzzcQp?(Caused?by?NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection?object?at?0x7fc2bcea1c88>:?Failed?to?establish?a?new?connection:?[Errno?101]?Network?is?unreachable',))requests.exceptions.ConnectionError:?HTTPSConnectionPool(host='cloudsso.cisco.com',?port=443):?Max?retries?exceeded?with?url:?/as/token.oauth2?client_id=djshucbvmpu4cmcsgufwt36w&client_secret=TVJxz72ADUBKdb7ySjTzzcQp?(Caused?by?NewConnectionError('<urllib3.connection.HTTPSConnection?object?at?0x00000214AA2EFA88>:?Failed?to?establish?a?new?connection:?[WinError?10060]?由于連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。'))
requests.exceptions.ProxyError:?HTTPSConnectionPool(host='api.cisco.com',?port=443):?Max?retries?exceeded?with?url:?/security/advisories/v2/OSType/ios?version=15.2%287%29E5?(Caused?by?ProxyError('Cannot?connect?to?proxy.',?ConnectionResetError(10054,?'遠程主機強迫關閉了一個現有的連接。',?None,?10054,?None)))
七、參考文檔
- [1] Cisco Product Security Incident Response Team:https://www.cisco.com/c/dam/en_us/about/doing_business/trust-center/docs/cisco-psirt-infographic.pdf
- [2] PSIRT openVuln API:https://developer.cisco.com/docs/psirt/#!overview/overview
- [3] 道高一丈,且看CWE4.2的新特性:https://zhuanlan.zhihu.com/p/340011094
- [4] 揭開CVSS的神秘面紗:https://codeant.valiantsec.cn/industry_detail?id=8042e0c9345c46efbe182698150f84a9
- [5] Cisco PSIRT openVuln API Query by CVE ID:https://developer.cisco.com/docs/psirt/#!api-reference/query-by-cve-id
- [6] Github CiscoPSIRT/openVulnQuery https://github.com/CiscoPSIRT/openVulnQuery
總結
以上是生活随笔為你收集整理的利用openVuln API自动化查询思科产品漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速理解各类软件开发过程模型(瀑布模型、
- 下一篇: 【前端学习日志】HTML表格表单注册页面