• 软件开发安全流程 SDL (Secure Development LifeCycle)

    Microsoft Security Development Lifecycle (SDL)

    这篇文章主要介绍软件开发流程中必要的安全技术与工具

    要让该流程能够有所落实, 还是必须回归安全技术

    單單依照流程执行还是不够的, 到底这流程中有执行上有哪些问题与技术要考量?

    安全培训

    与其说是培训不如说这部分更多的是沟通的过程, 安全的培训内容包含哪些? 一般来说分为下列几大部分

     

    公司整体安全政策

    例如资讯安全, 安全流程规范, 数位资产防护, USB/行动电脑使用规范等

    这样的培训通常会在新员工入职举办, 或是定期公司以宣传的方式进行,

    网络安全从业人员对于网络安全业务的处理, 会有更其他网络安全从业要求的培训,

    除了一般常见的软件安全技术, 例如: 安全编码 or 安全需求等.

    还包含法规与行业合规, 举例来说:

    • 中国有 《网络安全法》《中华人民共和国计算机信息系统安全保护条例(2011修订)》《通信网络安全防护管理办法》《国家安全法(2015)》
    • 每个国家对于密码与进出口都有贸易合规的相关规定
    • 个人隐私保护规范, 每个国家对于个人隐私数据的获得, 储存与处理也有特别法律的规律
    • 行业安全认证

    这些与 SDL 软件开发有什么关系呢? 主要在于必须要识别出关键的安全需求风险

    哪些软件的设计会导致安全合规的障碍或是缺失必须要识别出, 提炼出相关软件的安全需求, 安全设计, checkList

    Image result for AWS security certifications

    安全架构设计

    首先要区分的是软件的安全与安全的软件有所不同.

    软件的安全指的是透过 SDL (Secure Development Lifecyle)保障软件的安全

    安全的软件, 例如防毒软件

    这边更多指的是软件的安全, 当然防毒软件的本身也需要安全的设计,

    什么是一个好的安全架构设计 , 有许多的模型与架构, 一般来说ICU. X805提供一个整体性的思考

    尽管该模型超过 10年, 但是整体的安全设计原则还是没有改变

    改变的是许多不同的应用场景, 例如云化场景下的场景, 例如微服务架构下的场景, 例如开放环境下认证的场景等

    Related image

    安全设计

    安全设计的培训通常包含整体性攻击与威胁防护的安全设计方案,

    笔者很推荐这本书 https://msdn.microsoft.com/en-us/library/ff648647.aspx

    Ff648647.f04thcm01(en-us,PandP.10).gif

    另外OWASP ESAPI提供一个设计与实作整体的思考, 非常值得参考

    即使不使用 ESAPI 实作,  整体的安全设计也应该包含这些模组

    Related image

    威胁分析

    在设计阶段时会进行威胁分析的讨论, 针对每个模组进行 STRIDE 的威胁与防护的分析

    https://www.owasp.org/index.php/Application_Threat_Modeling#STRIDE

    https://www.owasp.org/index.php/Application_Security_Architecture_Cheat_Sheet

    随著时间的累积, 会累积一定的资料库

    进行这样的分析必须避免流于形式, 为了符合流程而只是做拷贝复制类似模组的威胁分析

    另外, 必须厘清现有的削减措施与建议消减措施以便落地于产品开发中

    这是一个安全工程师, 开发工程师, 安全与业务的双向沟通过程

    如何在业务与安全中取得一个平衡是这沟通过程中最重要的部分

    相关威胁分析工具与材料可参考:

    威胁分析 https://www.microsoft.com/en-us/sdl/adopt/threatmodeling.aspx

    威胁分析 https://www.owasp.org/index.php/Application_Threat_Modeling#STRIDE

     

    安全编码

    安全编码培训常见的有 C/C++, PHP, Java, Python, 编译安全, 安全编码扫描工具使用, 加密算法使用等

    业界比较值得参考的安全编码规范有

    CWE 常见的编码与软件错误

    Oracle Java 安全编码指南

    Secure Coding

    OWASP

    另外笔者也建议 FindBugs 工具所提供的编码错误指南

    编码扫描工具

    补充说明

     

    安全测试

    安全测试方法与工具,

    笔者推荐 OWASP Testing Guide https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents

    测试工具的部分知名的 Kali Linux 内建许多安全测试工具

    由于多半的服务为 Web, 也可以考虑使用 Samurai , 跟Kali Linux 类似, 但是著重于 Web 相关的测试工具

    http://www.samurai-wtf.org/

    Image result for web samurai

     

    网络法规 & 个人隐私保护

    由于欧洲 GDPR 个人隐私资料保护法的实施, 让个人隐私数据保护成为各互联网企业的显学

    在中国有<网络安全法>, 法律跟网络软件安全有什么关系呢? 笔者列举下列几点:

    • 日志保存必须6个月: 日志保存就必须注意到备份与完整性保护等机制
    • 数据对外输出: 如果有数据必须传输至其他国家就必须经过过滤与处理
    • 个人隐私收集与处理: 如果服务在处理过程中有收集用户数据必须告知
    • 漏洞响应: 漏洞的处理与响应必须符合规定与通报 《中国互联网协会漏洞信息披露和处置自律公约》

    中国漏洞权威发布的机构

    1.中国国家信息安全漏洞库:http://www.cnnvd.org.cn

    2.国家互联网应急中心:http://www.cert.org.cn

    参考: http://blog.nsfocus.net/network-security-law-points/#i-2

    另外《电子商务法》与《个人信息保护法》也正在立法中, 这些法案将对于中国互联网比较大的影响

    安全需求分析

    安全需求来源可以分为下列几个层面:

    • 客户
    • 法规
    • 行业 OWASP, NIST, CSA
    • 安全认证
    • 业务场景衍生

    另外笔者推荐参考 OWASP ASVS, 该专项对于安全整体需求分为19类

    Image result for OWASP ASVS

     

     

     

    参考

    SDL 指导书下载参考: https://www.microsoft.com/en-us/download/details.aspx?id=12379

    https://www.microsoft.com/en-us/sdl/default.aspx

     

  • 入侵检测开源工具与规则

    这篇文章主要介绍入侵检测的基本原理规则与开源工具

    入侵检测原理

    要侦测是否为有威胁入侵可以从下列几个方向著手, 所谓凡走过必留下痕迹, 因此从黑客可能会走过的痕迹思考

    入侵类型 说明 入侵范例
    环境侦察

    Reconnaissance

    黑客在进行攻击之前通常会对于网络与主机环境进行侦察, 取得必要与辅助的相关资讯

    这类的环境侦察通常也会留下些存取的轨迹与记录

    • 多次连接不存在的 ports, 端口扫描
    • 网站路径扫描, 存取多个不存在的档案或是路径
    认证 取得认证资讯是黑客的宝藏, 黑客会设法得知目前的认证方式找出是否有弱点或是可以入侵的机会, 因此认证成功, 多次的认证失败等都有可能是入侵的迹象
    • 非惯用异常用户端登入成功
    • 系统使用者帐户的登入成功
    • 多次异常的登入失败
    • 无效帐户的登入
    • 新增使用者帐户
    • 使用者帐户权限被修改
    • 登入时间异常
    攻击行为 黑客利用病毒, 工具, 注入等进行攻击行为, 这类的攻击通常需要判别特征与行为, 也有可能产生误判的现象
    • Exploit 攻击
    • 病毒攻击
    • Spam攻击
    • SQL Injection
    • RootKit
    • 无效存取
    • 日志出现大量的 ????? 或是@@@@可能表示Buffer Overflow攻击
    越权存取 黑客透过取得非法权限, 或是利用绕过权限等方式越权存取后端资源
    • 存取被拒绝
    • 存取允许
    • 存取不知名的资源或是服务
    • 被防火墙拒绝存取
    • 用户端配置错误
    • 用户端错误
    网络控制 黑客透过行动装置的方式接入网络或是伪造网路位址与内部服务
    • 未知的网络主机
    • ARP伪造
    • promiscuous mode
    系统监控  透过作业系统的系统运维日志来判断黑客的异常行为
    • 服务的启动
    • 服务的不可用
    • 系统错误
    • 关机
    • 日志被清除
    • 无效存取
    • promiscuous mode
    • 配置改变
    • 完整性较验失败
    • 磁碟空间不足
    • 时间异常或是被改变

    https://github.com/ossec/ossec-hids/tree/master/etc/rules

    规则编写四步骤

    要定义一个威胁检测的规则有四大步骤

    • 日志中撷取哪些资讯, 例如从登入日志中撷取  User 与 source IP, Login Result 等资讯
    • 建立相对应的 regular Expression 以匹配该侦测
    • 创建相关的安全规则, 定义 rule ID, 告警次数, 描述等
    • 监控日志观察该规则侦测的效果与误判情况

    OSSEC规则编写参考: http://ossec.net/ossec-docs/auscert-2007-dcid.pdf

     

    入侵检测规则优化

    入侵检测规则的优化不外乎是提高侦测率与降低误判

    我们不希望过多的告警让人工判断与介入频繁

    但是另一方面我们又不希望漏掉许多重大的安全事件的端倪

    一般来说安全检测规则的优化可以从下列几个方面著手

    • 频率:   例如 X时间内, 登入错误 Y 次
    • 严重性: 由于告警可能由多个事件触发, 每个事件定义 1~14安全严重等级, 适当的调整安全严重等级也会有帮助
    • 用户端来源: 有些用户端为定期可信,  因此对于特定来源 IP Addr 可以适当调整为白名单或是调降严重性
    • 忽略特定目录: 有些目录为系统暂存档案或是经常更新日志, 可以忽略减少误判
    • 执行档案: 重点关注系统执行档案, 重要系统的配置文件

    由于云化部署的缘故, 许多的云服务提供相关的工具,

    这类的工具除了入侵检测之外, 还包含漏洞侦测, 更进一步可能有日志分析, 完整性检查等

    AWS Inspector 介绍

    阿里云安骑士

    • CVE漏洞扫描
    • 安全配置与加固
    • 黑客入侵与预警
    • 推送补丁与更新

    资料来源

    https://yundun.aliyun.com/

    https://cn.aliyun.com/product/aegis?spm=5176.8134464.768336.5.YUEM5Y

    阿里雲盾攻擊檢測

    h

    https://help.aliyun.com/document_detail/28509.html?spm=5176.7946181.220058.5.1r6YRy

     

    主机入侵检测开源工具介绍

    比较知名的开源工具有 OSSEC, Wazuh, OSSIM

     

    OSSEC https://github.com/ossec/ossec-hids

    https://github.com/ossec/ossec-hids/tree/master/etc/rules

    Image result for OSSEC

    Wazuh https://documentation.wazuh.com/current/getting-started/architecture.html

    OSSIM www.alienvault.com/opensource-siem

    https://sourceforge.net/projects/os-sim/

    开源日志分析

    https://www.graylog.org/

    Overview search 70bb653087d2c407ac84197b3e67c9ff4d7b53749ed8f5ff29f37091efbe48cd

     

  • Web Application Firewall 的常見偵測原理

    Image result for Web application firewall

    這篇文章主要討論 WAF (Web Application Firewall ) 的偵測與防護基本原理

    1. 正規化

    由於黑客會利用各種編碼的方式繞過驗證或是檢查,

    所以 WAF 必須將原始 Http Request 的數據內容進行正規化

    所謂的正規化就是將原始資料”轉化”為對於 WAF 無害的資料格式, 正規化主要目的為:

    • 資料格式轉換, 對 WAF 無害
    • 資料格式轉換, 讓 WAF 可以容易用規則判斷

    常見的正規化資料格式轉換有:

    • 大小寫
    • URL 編碼
    • Null Byte 結尾
    • /./ 或是 /../的使用
    • 空白字元
    • 註釋
    • //  與 \\ 的轉換
    • 特殊意義字元 \t \001等

     

     

    2. 黑名單 IP

    如果來源的 IP 位址是已知的黑客或是危險的用戶端, 可以直接中斷該連線請求

    下列是業界比較知名黑名單 IP 的來源

     

    3. 程式語言錯誤訊息

    當網站沒有適當的錯誤處理時,

    回傳過多的程式異常訊息會導致黑客利用該訊息對於後端程式解析進行攻擊,

    SQL injection 就是常見的一種攻擊方式

    每種程式語言與資料庫回傳的錯誤訊息都不同,

    WAF 會偵測到這些回傳錯誤訊息並且進行過濾, 進一步判斷是否為某個來源用戶端造成的錯誤, 對於該用戶端進行阻攔

     

    4. 合法的Method

    常見的 Method 包含 HTTP post, get, put等

    如果可以針對存取資源所開放的 http method 來做白名單 WAF設定會讓偵測更加準確

    白名單相對缺點是耗時且每次更新都要重新檢視, 當服務多的時候白名單的維護也是一個問題

    常見的WAF黑名單配置是 HTTP HEAD 與 HTTP Options 這兩個 mehtods, 因為對外開放容易導致透露過多訊息外露,

    HTTP Verb CRUD Entire Collection (e.g. /customers) Specific Item (e.g. /customers/{id})
    POST Create 201 (Created), ‘Location’ header with link to /customers/{id} containing new ID. 404 (Not Found), 409 (Conflict) if resource already exists..
    GET Read 200 (OK), list of customers. Use pagination, sorting and filtering to navigate big lists. 200 (OK), single customer. 404 (Not Found), if ID not found or invalid.
    PUT Update/Replace 405 (Method Not Allowed), unless you want to update/replace every resource in the entire collection. 200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.
    PATCH Update/Modify 405 (Method Not Allowed), unless you want to modify the collection itself. 200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.
    DELETE Delete 405 (Method Not Allowed), unless you want to delete the whole collection—not often desirable. 200 (OK). 404 (Not Found), if ID not found or invalid.

    http://www.restapitutorial.com/lessons/httpmethods.html

     

    6. HTTP 標準協議

    檢查請求的內容是否符合 HTTP 標準協議, 這是一種比較有效且直覺的方式

    任意修改 HTTP 協議內容可能會導致的攻擊如下:

    Nature Type ID Name View(s)
    ChildOf Meta Attack Pattern 272 Protocol Manipulation
    1000
    ParentOf Detailed Attack Pattern 5 Blue Boxing
    1000
    ParentOf Detailed Attack Pattern 33 HTTP Request Smuggling
    1000
    ParentOf Detailed Attack Pattern 34 HTTP Response Splitting
    1000
    ParentOf Standard Attack Pattern 90 Reflection Attack in Authentication Protocol
    1000
    ParentOf Standard Attack Pattern 105 HTTP Request Splitting
    1000
    ParentOf Detailed Attack Pattern 273 HTTP Response Smuggling
    1000
    ParentOf Detailed Attack Pattern 274 HTTP Verb Tampering
    1000

    http://capec.mitre.org/data/definitions/220.html

    HTTP 協議中檢查的重點為:

    • MIME中filename 檔名
    • URL 合法性
    • Content-Length數值
    • 衝突與重複的 HTTP headers,  例如 keep-alive 與close重複與衝突
    • 不安全的字元, 例如 ” “, “<“, “>”,  “{“, “}”, “|”, “\”, “^”, “~”,   “[“, “]”, and “`”.等
    • 過濾異常缺少 Http header 的請求, 一般正常的請求會包含  Host, User-Agent, Accept headers, 因此如果缺少或是沒有值都是表示異常
    • Content-Length不等於 0 但是卻沒有Content-Type
    • HTTP protocol version

    https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html

    http://www.ietf.org/rfc/rfc2183.txt

    http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13

    http://www.ietf.org/rfc/rfc1738.txt

     

    7. 合法字元範圍白名單

    適用HTTP範圍 建議ASCII字符範圍
    REQUEST_URI, REQUEST_HEADERS, ARGS and ARGS_NAMES ASCII 1-255

    ASCII全部範圍, 除了 NULL

    REQUEST_URI, REQUEST_HEADERS, ARGS and ARGS_NAMES ASCII 9,10,13,32-126,128-255

    ASCII可視字元範圍 + TAB + 換行

     REQUEST_URI, REQUEST_HEADERS, ARGS, ARGS_NAMES and REQUEST_BODY ASCII 32-36,38-126

    可視範圍, 除了 %

    ARGS, ARGS_NAMES and REQUEST_BODY ASCII 38,44-46,48-58,61,65-90,95,97-122

    僅包含 A-Z a-z 0-9 = – _ . , : &

    除了 User-Agent, Referer and Cookie的 REQUEST_HEADERS ASCII 32,34,38,42-59,61,65-90,95,97-122

    A-Z a-z 0-9 = – _ . , : & ” * + / SPACE

    參考 ModSecurity Rules

     

    8. HTTP request Smuggling 攻擊

    HTTP request smuggling 攻擊主要利用重複傳送 content-length 造成 Web proxy 與 Web server 讀取資料的異常

    常見的特徵會在 HTTP 請求內容內出現重複不一致的 Content-Length與Transfer-Encoding

     

    詳細參考:

    http://projects.webappsec.org/HTTP-Request-Smuggling

    9. Header Injection 攻擊

    這種攻擊方式主要在 Http header 中加入換行符號  %0d %0a

    https://en.wikipedia.org/wiki/HTTP_header_injection

    目錄字典攻擊

    這種攻擊方式黑客嘗試訪問非正常或是未經授權的訪問路徑

    常見的特徵有 /../ ..\ ../  Index of  To Parent Directory等

    因此當訪問路徑包含有 /../ ..\ ../ 也是異常的一種訪問

     

    10. 異常的系統檔案讀取

    有些常見的系統檔案或是設定檔不對外開放, 如果在來源請求中有這些檔案名稱也是異常存取,

    • Linux: /etc/passwd/  /etc/hosts
    • Windows: /WINDOWS/system32/drivers/etc/hosts  /boot.ini
    • PhpAdmin: /etc/phpmyadmin/config.inc.php
    • MySQL: /var/log/mysql.err

    可參考這列表

    https://github.com/lightos/Panoptic/blob/master/cases.xml

    11. OWASP top 10 攻擊

    其他攻擊的檢測還包含 OWASP top 10

    • A1 Injection
    • A2 Broken Authentication and Session Management
    • A3 Cross-Site Scripting (XSS)
    • A4 Broken Access Control (As it was in 2004)
    • A5 Security Misconfiguration
    • A6 Sensitive Data Exposure
    • A7 Insufficient Attack Protection (NEW)
    • A8 Cross-Site Request Forgery (CSRF)
    • A9 Using Components with Known Vulnerabilities
    • A10 Underprotected APIs (NEW)

    12. 異常已知的 User Agent

    常見的自動化攻擊工具或是網站攻擊工具會有預設的 UserAgent ,

    這也是一種可以過濾基本已知網站攻擊工具的一種方式

    例如:

    “ArchiveTeam”, // ignores robots.txt and hammers server
    “adwords”, // referrer spam
    “autoemailspider”, // spam harvester
    “blogsearchbot-martin”, // from honeypot
    “BrowserEmulator/”, // open proxy software

    參考

    https://perishablepress.com/ultimate-htaccess-blacklist/