• 应用软件开发安全的专业领域

    这篇文章主要说明软件开发的安全保障会涉及哪些专业领域?

    从Microsoft SDL 定义的安全软件开发流程中主要有安全设计,安全编码, 安全测试等

    这篇文章将探讨每个子领域的专业范围与相关的业界实践的参考

    安全需求架构与设计

    涵盖范围

    这部分包含对于产品安全需求, 可分为下列几个方向:

    • 必要基本安全要求:  这个基础性要求表示产品如果违反其中的安全需求, 该产品或服务就不能上线
    • 隐私保护设计:
    • 身份访问控制:
    • 加密与密钥管理
    • 操作系统, Web, 数据库加固:
    • 威胁攻击与安全库:
    • 威胁分析

    笔者推荐可以以OWASP ASVS (Application Security Verification Standard) 为基础来延伸,

    OWASP ASVS 为一个软件安全需求与架构分为19大类, 每一大类分别有三个等级,

    实务应用上可以依据该软件安全等级(高 Level 3,  中 L2,  低L1) 特性来匹配使用,

    https://github.com/OWASP/ASVS/tree/master/3.0.1

    Image result for OWASP ASVS

    Image result for asvs owasp

    安全需求来源

    除了上述OWASP ASVS可以为软件安全架构提供一个全貌之外,

    甲方(非安全/防毒服务)应用软件的安全需求来源还需要考量:

    • 行业规范与安全合规 (如 ISO, SAC, CSA)
    • 法律法规, 例如个人隐私资料保护法, 中国网络法
    • 漏洞发布
    • 客户要求
    • 业界实践 OWASP, Spring Security, Federation SSO…

    一般来说, 甲方应用软件的安全需求为隐性特性, 比较不容易显现该安全需求的价值与特色

    这是甲方软件应用安全与乙方安全服务软件在安全需求规划上有所不同

    乙方的安全需求更多专注的是该安全服务要解决黑客或是病毒威胁的场景,

    甲方的安全需求多半专注在软件本身的安全保障, 更多的是需要配合该软件本身与业务场景结合的安全需求与保障

    业界实践与工具

    业界实践 参考 说明
    NIST 800-53 http://csrc.nist.gov/publications/PubsSPs.html NIST 有许多的安全设计方案可供参考, 其中NIST 800-53定义软件整体安全架构, AWS 云服务厂商依据这架构对标梳理安全需求

    http://docs.aws.amazon.com/quickstart/latest/accelerator-nist/welcome.html

    NIST FIPS http://csrc.nist.gov/publications/PubsFIPS.html  软件开发中使用加密算法保护密钥, 密码与敏感性资讯等可以参考FIPS对于加密算法的建议与规范
     OWASP ASVS https://github.com/OWASP/ASVS/tree/master/3.0.1  为软件架构安全需求提供整体三个等级的建议
    Microsoft SDL https://msdn.microsoft.com/en-us/library/ff648644.aspx 微软提出Secure Development Lifecycle软件开发的安全保障, 说明整个软件开发过程中需要进行的安全保障活动, 另外笔者很推荐这本书 “Improving Web Application Security: Threats and Countermeasures”

    尽管这本书 2003年出版已经有一段历史,

    该书本内容提出许多实用的安全架构, 安全需求, checklist等

    对于目前 Web与Cloud 服务的时代还是很值得参考

    PDF 电子版 https://www.microsoft.com/en-us/download/details.aspx?id=1330

     

    CAPEC 攻击威胁库 http://capec.mitre.org/data/definitions/1000.html 为避免为了单纯引入安全技术而安全, 必须了解该安全需求的原始来源与需要解决的问题

    因此,

     

     

    安全编码

    涵盖范围

    业界实践与工具

     

    商用工具用在编码扫描比较知名的有

    • Coverity
    • Klocwork
    • Fortify
    • CodeMercury

    安全测试

    涵盖范围

    业界实践与工具

    •  https://tools.kali.org/tools-listing
    • https://sourceforge.net/projects/samurai/files/
    • https://github.com/MobSF/Mobile-Security-Framework-MobSF
    • https://manifestsecurity.com/appie/
    • https://github.com/linkedin/qark
    • https://nmap.org/
    • https://portswigger.net/burp/
    • https://www.concise-courses.com/hacking-tools/top-ten/
    • https://www.owasp.org/index.php/AppSensor_DetectionPoints#AccessControlException

     

     

     

    安全运维与监控

    涵盖范围

    业界实践与工具

    • https://github.com/ossec/ossec-hids
    • https://github.com/wazuh/wazuh
    • https://www.graylog.org/
    • https://github.com/Netflix/security_monkey
    • CIS Security Benchmarks  https://benchmarks.cisecurity.org/downloads/multiform/
    • OpenSCAP https://www.open-scap.org/
    • https://www.first.org/cvss/calculator/3.0

     

    应急响应

    涵盖范围

    业界实践与工具

    • SANS Investigative Forensic Toolkit (SIFT)  https://digital-forensics.sans.org/community/downloads
    • Cuckoosandbox https://www.cuckoosandbox.org/
    • https://tools.kali.org/tools-listing
    • https://sourceforge.net/projects/ocfa/
    • http://www.caine-live.net/
    • http://www.x-ways.net/investigator/index-m.html
    • http://www.sleuthkit.org/
    • http://www.volatilityfoundation.org/24
    • https://github.com/volatilityfoundation/volatility
    • http://www.xplico.org/about
    • https://www.fireeye.com/services/freeware/redline.html
    • http://www.plainsight.info/features.html

     

    安全管理

    涵盖范围

    业界实践与工具

    •  BSIMM
    • SAFECode,
    • OpenSAMM,
    • Microsoft SDL,
    • ASVS.
    • https://github.com/WebGoat/WebGoat
    • https://www.owasp.org/index.php/OWASP_Security_Knowledge_Framework
    • https://demo.securityknowledgeframework.org/knowledge-base

     

     

  • 5個MySQL 資料庫的安全防護技巧

    Image result for MySQL security

    MySQL 是廣泛被使用的資料庫, 可以很容易的被安裝使用,

    但是安裝完之後, 有許多安全的防護措施沒有顧慮到導致潛在的資訊安全風險或是資訊外洩

    這篇文章主要說明 MySQL 提供哪些安全防護措施,  MySQL安全運維與部署的時候需要特別注意的地方

     

    1. 一鍵安裝 mysql_secure_installation

    MySQL 本身提供 mysql_secure_isntallation供系統管理可以一鍵方式進行安全的配置與部署,

    主要提供下列五項安全防護設定:

    • Change the root password? [Y/n] y
    • Remove anonymous users? [Y/n] y
    • Disallow root login remotely? [Y/n] y
    • Remove test database and access to it? [Y/n] y
    • Reload privilege tables now? [Y/n] y

    其中 Reload privilege tables 主要是要讓設定立即生效

    2. 檔案權限

    • chmod 0660 /etc/my.cnf
    • 設定 datadir 檔案權限
    chmod 700 <datadir>
    chown mysql:mysql <datadir>

     

    • 日誌檔案權限設定為 640
    chmod 640 <log file>
    chown mysql:mysql <log file>

     

    • mysqladmin、mysql、mysqld檔process 設定權限為 110

    3. 清除歷史檔案

    MySQL會將所有執行命令紀錄在歷史檔案中  .mysql_history

    因此, 該檔案會包含許多敏感性訊息, 必須要將該檔案刪除

    # rm $HOME/.mysql_history
    
    # ln -s /dev/null $HOME/.mysql_history

     

    4. 禁止遠端登入

    編輯/etc/my.cnf
    增加skip-networking 或是使用 bind-address=127.0.0.1

    當只有本機用戶端可以存取的時候, 禁止其他遠端主機 TCP的連線時, 就可以使用這個參數 skip-networking

    5. 禁止使用LOCAL INFILE

    這個設定主要限制資料庫禁止任意讀取本地檔案, 例如:

    mysql> SELECT load_file("/etc/passwd")

    編輯 /ect/my.cnf/

    local_infile=0

    https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_local_infile

    其他相關安全設定

    # 具備有 INSERT權限的使用者才可以新建使用者

    safe-user-create = 1

    # 禁止用戶端如果使用MySQL 4.1版本之前較不安全的舊密碼格式

    secure-auth = 1

    # 該系統變數定義誰有權限執行 Show databases 的指令

    # https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-show-database
    skip-show-database

     

    # 讓MySQL知道不要使用操作系統的 Symbolic links來讀取資料庫檔案

    skip-symbolic-links

    # 這個設定主要限定當 MySQL讀取外部檔案時的路徑, Load_data , select into outfile, Load_file()等
    secure-file-priv = /tmp

    6. 限制用戶資源

    可以透過下列設定限制每個用戶可使用的資源

    MAX_QUESTIONS
    MAX_USER_CONNECTIONS
    MAX_QUERIES_PER_HOUR
    MAX_UPDATES_PER_HOUR
    MAX_CONNECTIONS_PER_HOUR

     

    參考

    https://supermarket.chef.io/cookbooks/mysql-hardening

    https://www.symantec.com/connect/articles/securing-mysql-step-step

    http://www.w3resource.com/mysql/mysql-security.php

    https://www.slideshare.net/MarkSwarbrick/mysql-security-57

     

  • 软件开发安全流程 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