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

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

    从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

     

  • 6個安全編碼檢視小技巧

    這篇文章主要介紹幾個常見的編碼問題的識別,

    如何透過常見的關鍵字或是特徵識別出編碼上可能會產生的安全風險

    1. 檔案的輸入與輸出

    檢查重點: 檢查的重點在於檔案檔名, 路徑與資料輸入的合法性較驗

    資訊安全風險:

    程式碼關鍵字範例:

    openFileOutput, FileInputStream, FilterInputStream, SequenceInputStream

    ObjectInputStream, PipedInputStream, StreamTokenizer, getResourceAsStream

    java.io.FileReader, java.io.FileWriter, java.io.RandomAccessFile, java.io.File, java.io.FileOutputStream

     

    2. 網站參數

    檢查重點: 資料輸入的驗證

    資訊安全風險: 注入攻擊, 例如 XSS, SQLi

    程式碼關鍵字範例:

    getParameterNames, getParameter, getParameterValues, getParamaterMap

    getHeader, getRequestURL, referer, Statement, StartWith, EndWith

    3. 密碼相關

    檢查重點: 弱加密算法

    資訊安全風險: 使用不安全的加密算法, 導致黑客破解密碼系統

    程式碼關鍵字範例:

    java.util.Random, SHA-1, DES, MD5, RC4

    password, pass, pwd, encryp, rand,

     

    4. 執行危險函數

    檢查重點: 程式中採用危險執行函數, 建議不使用這些函數

    資訊安全風險: 黑客利用參數輸入執行腳本, 造成 OS command injection

    程式碼關鍵字範例:

    eval, getRuntime.exec,  getRuntime.cmd,

     

    5. 網絡通訊端口

    檢查重點: 程式中間接開放或是連接其他網絡通訊端口

    資訊安全風險: 額外的通訊端口可能造成黑客網絡攻擊的管道 造成後門

    程式碼關鍵字範例:

    1024~65535

     

    6.敏感性資訊註釋

    檢查重點: 程式碼過多的註解, 例如加密算法說明, 後台鑑權處理邏輯, 作者訊息, 電話, email, 帳號密碼等

    資訊安全風險: 黑客透過這些註解獲取攻擊的方式

    程式碼關鍵字範例:

    //
    /*;*/
    <!-;–>
    rem
    ::
    #