我一直在加速测试驱动开发(TDD)的最新趋势.我所做的大部分开发都是用C或C++编写的.令我感到震惊的是,常见的TDD实践与常见的安全编码实践之间存在非常明显的冲突.在它的核心,TDD告诉你,你不应该为没有失败测试的东西编写新的代码.对我来说,这意味着我不应该编写安全代码,除非我有单元测试来查看我的代码是否安全.
这带来了两个问题:
如何有效地编写单元测试以测试缓冲区溢出,堆栈溢出,堆溢出,数组索引错误,格式化字符串错误,ANSI与Unicode与MBCS字符串大小错误匹配,安全字符串处理(来自Howard和LeBlanc的"编写安全代码") )?
在标准TDD实践的什么时候应该包括这些测试,因为大部分安全性都是非功能性的.
令人惊讶的是,我发现很少有研究讨论TDD和安全性.我遇到的大部分内容都是TDD论文,它们在很高的层次上提到TDD将"使您的代码更安全".
我正在寻找上述问题的任何直接答案,任何与此有关的研究(我看起来已经找不到太多),或者TDD大师的任何地方,所以我可以敲门(虚拟)和看看他们是否有任何好的答案.
谢谢!
编辑:
Fuzzing的主题已经出现,我认为这是解决这个问题的一个很好的方法(总的来说).这引出了一些问题:模糊测试是否适合TDD?在TDD过程中,模糊测试适合哪些?
参与式单元测试(可能是自动化的)也让我想到了.这可能是一种在测试过程中早期获得模糊测试结果的方法.我不确定它在哪里适合TDD.
编辑2:
到目前为止,谢谢大家的答案.在这一点上,我对如何利用参数化测试作为我们的函数的伪模糊器非常感兴趣.但是,我们如何确定要测试安全性的测试?我们怎样才能确定我们能够充分覆盖攻击空间?
软件安全中一个众所周知的问题是,如果您防范5种攻击情形,攻击者只会查找并使用第6次攻击.这是一个非常困难的猫捉老鼠游戏.TDD是否给我们带来了任何优势?
我在使用子进程模块获取崩溃程序的输出时遇到问题.我正在使用python2.7和subprocess来调用带有奇怪参数的程序以获得一些段错误为了调用程序,我使用以下代码:
proc = (subprocess.Popen(called,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE))
out,err=proc.communicate()
print out,err
Run Code Online (Sandbox Code Playgroud)
called是一个包含程序名称和参数的列表(一个包含随机字节的字符串,除了子进程根本不喜欢的NULL字节)
当程序没有崩溃时代码表现并向我显示stdout和stderr,但是当它崩溃时,out和err是空的而不是显示着名的"Segmentation fault".
即使程序崩溃,我希望找到一种方法来获取和错误.
希望有人在这里作为一个想法:)
PS:我也尝试过check_output/call/check_call方法
编辑:
我在一个python虚拟环境中的Archlinux 64位上运行这个脚本(这里不应该是重要的东西,但你永远不会知道:p)
segfault发生在我正在尝试运行的C程序中,是缓冲区溢出的结果
问题是当发生段错误时,我无法获得子进程发生的输出
我得到了正确的返回码:-11(SIGSEGV)
使用python我得到:
./dumb2 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
('Exit code was:', -11)
('Output was:', '')
('Errors were:', '')
Run Code Online (Sandbox Code Playgroud)在python外面,我得到:
./dumb2 $(perl -e "print 'A'x50")
BEGINNING OF PROGRAM
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
END OF THE PROGRAM
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)shell的返回值是相同的:echo $?返回139所以-11($?&128)
是否有可以在WebApplications上执行模糊测试的框架?我知道Selenium
并且WebDriver
用于构建Web应用程序的测试,但我特别感兴趣的是内置模糊测试的库,框架或项目,因此我不需要重新发明轮子.
例如,我可以从这些功能中受益:
有谁知道实现这些功能的项目?(最好是Java :))
任何人都可以推荐任何程序员友好(即可扩展)的框架或系统来执行网络级数据包模糊测试?
我正在寻找这样一个系统,我可以用其他数据包格式编程,并以协议相关的方式打破这些数据包.
我知道如何使用Google.我正在寻找具体的建议:)
谢谢!
Java有没有任何模糊库?
我想在现有的基于Java Web的自动化集成测试中使用模糊功能.我已经做了很多搜索,但是我想要一个支持HTTP/S的库.有很多Python工具,但我想坚持使用Java,因为这是程序员正在使用的.
JBroFuzz本质上具有我需要的模糊测试功能,但我需要一个API,他们还没有发布一个.
我想为H.264编写一个小模糊器,但我不知道文件格式.你能不能给我标准,以便伪造正确的(因而不正确的)h.264文件.
谢谢Mathias
Java中是否有灵活的模糊测试框架?
模糊测试或模糊测试是一种软件测试技术,通常是自动或半自动的,涉及向计算机程序的输入提供无效,意外或随机数据.然后监视程序是否存在异常,例如崩溃,内置代码断言失败或查找潜在的内存泄漏.模糊测试通常用于测试软件或计算机系统中的安全问题.
我知道Erlang有这样一个框架.任何提示都是受欢迎的.
我正在寻找一种自动模糊我的应用程序或扫描它的漏洞的方法.请假设我的黑客知识是0.此外,源是在我的本地主机上所以我需要一种方法在本地模糊它而不依赖于互联网连接.一些安全专家可以给我一些提示或建议吗?我不确定哪种选择最好.
编辑:
感谢您努力回答,但到目前为止似乎都没有说明问题.我想更具体(因为它有助于提问)但不影响我的意见,或者听起来像我在宣传一个特定的产品.我正在寻找像马鹿这样的东西(很遗憾提到名字,但不得不,因为答案到目前为止,学习sql注射,xss等显然不是真正的"专家"这个问题的答案.我已经知道这些(认真,这个问题听起来像是一个不了解安全问题的人会问的吗?)
我不是在问我是否应该测试,我在问我应该怎么测试.我已经决定采用自动化(除非有人给我一个证明它没用的专家答案,否则这个决定没有回头路),所以请尊重我想要自动化的决定.我不想通过每个编译的xss,sql注入等黑客列表,并自己手动尝试对我的网站(甚至黑客不破解这种方式).获得问题的任何人都可获得超级额外积分.
有些人问为什么不学习. 最好的做法(我知道)与了解黑客行为不同.有些人想说他们是一个翻转硬币,但我绝对不同意:)因此我需要一个具有"黑客心态"的人的保护工具.事实上,你应该怎么做才会受到伤害;)专家的答案请来自那些知道的人.
我有一个ANTLR语法,我想模糊我的解析器.
我想对一个XML解析器进行模糊测试,并想知道是否有一些合适的模糊器.
不仅可以生成随机垃圾,还可以利用现有的架构规范(如XSD或DTD).
fuzzing ×10
testing ×5
java ×2
security ×2
antlr ×1
communicate ×1
h.264 ×1
javascript ×1
networking ×1
parsing ×1
php ×1
python ×1
standards ×1
subprocess ×1
tdd ×1
unit-testing ×1
xml ×1
xsd ×1