我正在为我托管的一个应用程序编写威胁模型文档。它是一个Apache网站,允许用户登录,通过添加一些最畅销的产品等来创建他们的小部件。有人可以给我一些关于如何开始的指示吗?
前端使用 javascript + perl,后端是 cpp。我们确实接受来自用户的敏感信息,例如他的姓名,SSN等,并且我们会进行存储会话ID
- 有哪些方法可以识别应用程序中的安全漏洞?我应该如何开始?
- 哪些领域应该成为文件的一部分?
- 我应该阅读哪些威胁,例如DoS等?
请尽可能多的人思考打破系统的方法。他们很可能会想到你不会想到的事情。跳出框框思考至关重要。
正确的威胁树分析从一系列不良结果开始("敏感数据泄露","服务器被劫持以托管恶意软件/发送垃圾邮件/成为僵尸网络的一部分/其他什么","公司因使用被盗的信用卡详细信息而受到欺诈",希望您可以想到更多)并向后工作:发生这种情况需要什么?通常你会发现每个糟糕的结果都会有几个必需的促成事件 - 一个因果链 - 通过比较它们,你可以识别弱点并深入计划你的防御。
这可能无助于构建威胁模型文档,但 OWASP 操作方法可能会帮助您根据行业最佳实践验证应用程序的设计。
我不是安全方面的专家,但这是我的两分钱。
1)你可以放心地认为javascript是完全不安全的,因为你并没有真正控制它的执行。
2)所以,perl部分是第一道防线。阅读perldoc perlsec作为入门。
应该检查包含eval
、反引号、system
和open
的Perl代码(始终使用树参数打开,以确保)。
此外,应该审查缺乏严格/警告的代码,理想情况下,重写。
任何未经彻底有效性检查的输入都是可疑的。当然,任何未处理的输入(仅由系统存储的用户文件除外)都不应到达后端。
3)根据我最近的经验:
-
我们有基于将输入提供给正则表达式然后
eval
的 JSON 反序列化。我已经设法传递了perl代码。失败。 -
我们有一大块代码晦涩难懂,严格,没有任何注释,并且依赖于外部程序的某些行为,迫使我们使用过时的SSH版本。失败。(我承认没有重写它)。
-
我们有
open (FD, "$file");
.虽然从$file中删除了前导/
和..
,但显然没有检查管道符号(|
)。可以提供精心设计的命令,而不是文件名。失败。始终使用三参数打开。系统/可执行文件也是如此:只有@array变体是可以的,不要依赖愚蠢的ls '$file'
。
我将不胜感激其他人的补充和/或更正。
有关您的威胁建模方法,请查看MyAppSecurity的威胁建模器。从高级架构图中可视化您的应用程序非常容易,并识别潜在威胁,以及在安全代码和安全控制方面找到补救控制。
干杯
免责声明:
我既不是安全专家,也不是合规专家,也不是律师。不要从表面上接受这个建议。在处理机密信息时,您应该寻求专家建议。
合规性和法规。
我真的无法为您总结,请阅读:http://en.wikipedia.org/wiki/Information_privacy_law
美国 : FISMA 和 FIPS
(包括但不限于...
)有标准和法律http://en.wikipedia.org/wiki/Federal_Information_Security_Management_Act_of_2002http://en.wikipedia.org/wiki/Federal_Information_Processing_Standards
FIPS 199:http://csrc.nist.gov/publications/fips/fips199/FIPS-PUB-199-final.pdf
FIPS 200:http://csrc.nist.gov/publications/fips/fips200/FIPS-200-final-march.pdf
回到问题...
我们接受来自用户的敏感信息,如他的姓名,SSN等
FIPS 199 和 200 将为您提供评估需要完成的工作的良好起点。
有哪些方法可以识别应用程序中的安全漏洞?
- 支付专家审查您的策略。
- 付钱给专家进行渗透测试
- 付钱给黑客进行负责任的披露。
- 查看常见漏洞和披露 (CVE) 数据库:https://cve.mitre.org/
- 查看漏洞利用数据库:http://www.exploit-db.com/
例如,对于Perl...https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=perl
我应该如何开始?
从信息治理 (IG) 的以下定义开始:http://searchcompliance.techtarget.com/definition/information-governance
评估信息的使用方式和位置。
使用CVE/漏洞利用数据库中的相关信息为您自己的软件编写渗透测试。
哪些领域应该成为文件的一部分?
我发现使用系统架构图有助于确定哪些部分要独立测试和隔离;以及要保护哪些边界。
如果您已经查看了上一节,您应该对可以放入文档中的内容有一个好主意。
我应该阅读哪些威胁,例如DoS等?
这些列在CVE/漏洞利用数据库中。