白帽子程序员的黑帽知识

时间:2009-04-21 13:29:36

标签: security

当诚实的开发人员学习黑帽黑客的技术时,非程序员总是持怀疑态度。显然,我们需要学习他们的许多技巧,这样我们才能保证自己的安全性达到标准。

您认为诚实的程序员在多大程度上需要了解恶意程序员的方法?

21 个答案:

答案 0 :(得分:43)

在一天结束时,没有任何“黑帽子”知道的是犯罪知识,而是知识的应用方式。深入了解任何技术作为程序员是有价值的,这是我们如何充分利用系统。这些天可能不知道深度,因为我们已经有越来越多的框架,库和组件使用这些知识编写,以节省您必须知道的一切,但它仍然很好地不时挖掘。

答案 1 :(得分:38)

我会变得有点异端,然后说出来:

  • 你真的需要和他说话 安全的系统管理员/网络人员 他们的机器。这些人每天都在处理闯入的概念,并且总是在寻找潜在的利用来对付他们。在大多数情况下,忽略攻击者如何思考的“动机”方面,因为“黑客入侵恶名”的日子早已不复存在。而是关注方法论。有能力的管理员将能够轻松证明这一点。

当你编写一个程序时,你正在展示(希望)一个无缝,流畅的界面到$ {whatever-else-accepted-your-programs-I / O}。在这种情况下,它可能是最终用户,或者它可能是另一台机器上的另一个进程,但无关紧要。 总是假设您的应用程序的“客户端”可能存在敌意,无论它是机器还是个人。

不相信我?尝试编写一个小型应用程序,从销售人员处获取销售订单,然后制定一个公司规则,您需要通过该应用程序强制执行,但销售人员不断尝试四处走动以便他们赚更多钱。仅仅这个小小的练习将证明一个有动力的攻击者 - 在这种情况下,预期的最终用户 - 将如何积极地寻找利用逻辑中的缺陷或通过其他方式游戏系统的方法。 这些是值得信赖的最终用户!

多人在线游戏经常与骗子打成一场战争,因为服务器软件通常信任客户;并且在所有情况下,客户端都可以并且被黑客入侵,从而导致玩家游戏系统。想一想 - 在这里,我们有一些人只是在享受自己,他们将采取极端措施,在不涉及赚钱的活动中占上风。

想象一下专业机器人牧民以这种方式谋生的动机......编写恶意软件,以便他们可以利用其他人的机器作为收入来源,将他们的僵尸网络卖给出价最高的垃圾邮件。 ..yes,this really does happen

无论动机如何,重点仍然存在,你的程序可能会在某些时候受到攻击。仅保护buffer overflowsstack smashing堆栈执行是不够的(代码作为数据加载到堆栈中,然后返回完成卸载堆栈,导致代码执行), data executioncross-site scriptingprivilege escalationrace conditions或其他“程序化”攻击虽然有所帮助。除了“标准”程序化防御之外,您还需要考虑信任,验证,身份和凭证 - 换句话说,处理提供程序输入的任何内容以及消耗程序输出的内容。例如,如何从程序化角度对DNS poisoning进行辩护?有时,你无法避免代码中的事情 - 让最终用户不将密码交给同事是一个例子。

将这些概念合并到方法中以获得安全性,而不是“技术”。 Security is a process, not a product。当你开始考虑你的程序的“另一面”,以及你可以用来缓解这些问题的方法时,它会变得更加清晰,哪些是正确的,哪些可以去可怕的错了。

答案 2 :(得分:37)

我在这上面就迟到了,正如我刚刚在播客上听到的那样。但是,我会提出自己的看法,就像曾经在软件公司的安全团队工作过一样。

我们实际上非常重视开发人员教育,我们会尽可能多地为开发人员提供安全开发的基础培训。对安全性的思考确实需要从正常开发中转变思维方式,因此我们试图让开发人员思考如何以突破性的方式思考问题。我们使用的一个支柱是带有数字键盘的家用保险箱之一。我们让开发人员从内到外检查它,试图想出一种突破它的方法。 (解决方案是在手柄上施加压力,同时在顶部给安全装置猛烈撞击,这会导致螺栓在螺线管的弹簧上反弹。)虽然我们不会给他们特定的黑帽技术,但我们讨论导致这些漏洞的实现错误 - 特别是它们之前可能没有遇到的事情,比如整数溢出或编译器优化函数调用(如memset清除密码)。我们在内部发布了一份月度安全通讯,邀请开发人员在小代码示例中发现与安全相关的错误,这肯定显示了他们会错过多少。

我们还尝试遵循微软的安全开发生命周期,这将涉及让开发人员谈论他们产品的架构,并找出资产和攻击这些资产的可能方法。

对于大多数前开发人员的安全团队来说,理解黑帽技术对我们来说非常重要。我们负责的事情之一是接收来自第三方的安全警报,并且知道黑帽利用某些弱点是多么困难是分流和调查过程的重要部分。是的,有时我会通过调试器来计算易受攻击的例程的内存偏移量并修补二进制可执行文件。

但真正的问题是,其中很多都超出了开发人员的能力。任何规模合理的公司都会有很多开发人员在编写代码方面做得很好,但却没有安全思维。所以我对你的问题的回答是这样的:期望所有开发人员拥有黑帽知识将是一个不受欢迎和不利的负担,但你公司的某人应该具备这方面的知识,无论是安全审计还是响应团队,或只是高级开发人员。

答案 3 :(得分:19)

在很大程度上。你需要像罪犯一样思考,或者你不够偏执。

答案 4 :(得分:18)

  

您认为诚实的程序员在多大程度上需要了解恶意程序员的方法?

您需要了解更多

答案 5 :(得分:13)

我作为安全人员而不是开发人员工作,根据我的经验,我可以简单地说你不能学习像黑帽子或专业白帽那样好的东西,除非它是你的第二职业。这太耗时了。

最重要的一点是看到一些坏人或专业人士采取行动并了解不安全代码的可能性和影响。

因此,通过学习一些技巧,但很多人可能会感到“虚假的安全感”,因为他或她无法入侵。虽然技术娴熟的攻击者可能会在几分钟内破解同样的事情。

话虽如此,一旦你记住这一点,我认为学习一些攻击很有趣,有趣且非常有教育意义,可以学习如何破解东西。

答案 6 :(得分:9)

像鸽子一样“无辜,像蛇一样聪明”,并学习那些有邪恶目的的技术。也就是说,应该谨慎使用这些知识。 “强大的力量带来了巨大的责任”。

答案 7 :(得分:9)

绝对要学习黑暗的一面。即使你不学习实际技术,至少要努力学习什么是可能的。

alt text alt text

了解交易技巧的良好资源是Reversing: Secrets of Reverse EngineeringHacking: The Art of Exploitation。它们是为双方编写的 - 这些可以用来学习如何破解,但它们也提供了防止这类攻击的方法。

答案 8 :(得分:8)

提醒一句:State of Oregon vs. Randal Schwartz

在我们的网站上调查两个不同事件的一小部分,我会说在用它来攻击你之前学习漏洞的可能性很小。也许如果你将自己的职业生涯奉献给白帽子,你将会在大多数流行的硬件/软件堆栈中保持领先地位。但对于普通的程序员来说,你更有可能处于反应模式。

您有责任了解自己的软件是如何被黑客攻击的,并有责任与第三方软件保持合理的最新状态。制定应急计划以应对攻击将是一件好事,特别是如果您是一个备受瞩目或高价值的目标。有些地方会立即关闭一个洞,但我们的网站往往会留下一些漏洞,以协助执法人员抓捕肇事者。 IT安全团队偶尔会在内部宣布它将进行端口扫描,以便SA不会对此感到不满。

答案 9 :(得分:5)

Design for evil。 “当善是愚蠢的时候,邪恶就会永远胜利。”

简而言之,如果你不像罪犯一样思考,那并不意味着犯罪分子不会。

答案 10 :(得分:5)

经常错过的一项技能是社会工程。

很多人根本不知道他们什么时候被骗。在以前的公司,VP通过在会议室中让三名(女性)临时工呼叫程序员和系统管理员并通过脚本工作来尝试让某人授予访问权限或显示密码来进行测试。每个临时工都可以在通话的第一个小时内访问某些内容。

我敢打赌,如果在任何中型到大型公司进行类似的测试,他们都会得到相同的结果。

答案 11 :(得分:5)

我认为“防御性编码”的一部分包括了解恶意技术,但与此同时,您不一定需要知道所有技术才能有效防御它们。 例如,了解缓冲区溢出攻击并不是尝试保护缓冲区不被溢出的原因。你保护它们不会溢出,因为如果它们这样做,它可能会对你的程序造成严重破坏,无论它是一个bug还是一个攻击。

如果你写得非常彻底检查并且设计良好的代码,那么恶意攻击将无法渗透,因为良好的架构应该自动锁定副作用和未经授权的访问。

然而,最后一段假设我们有一个完美的工作,我们有足够的时间来使我们的代码恰到好处。由于这样的工作不存在,因此了解恶意技术是一个很好的捷径,因为这意味着尽管您的代码并不完美,但您可以为这些漏洞创建“解决方法”,以确保它们不会获得通过。但是,那些不会使代码更好,并且它们不会使应用程序更好。

最终,了解恶意攻击是一件值得注意的事情,但只有确保您遵守最佳做法才能涵盖95%的漏洞。

答案 12 :(得分:5)

我个人看不到技术差异。当然动机不同但技术游戏是一样的。这就像问“好东西”需要了解什么样的战争。

答案就是全部,即使他们没有积极地练习它。

答案 13 :(得分:3)

白帽子需要学习的技巧之一是如何在社会工程方面进行测试/缓解/思考,因为最大的安全威胁是人。

白帽擅长操纵位,但黑帽子经常操纵人。

答案 14 :(得分:1)

我们白帽子和灰帽子需要擅长百万件事,那些黑帽子和滑板只需要成功一件事

答案 15 :(得分:1)

我将采取有争议的立场,并说有一些黑帽知识,你不需要成为一个好的白帽黑客。医生不需要知道如何通过遗传工程改造病毒来有效治疗疾病。

答案 16 :(得分:1)

基本上,黑客使用的几乎所有安全漏洞都是由糟糕的编程风格或规则引入的代码中的错误。如果您编写代码来防止错误数据和无效的调用操作,您将阻止代码中的大多数安全漏洞。

如果您有兴趣保护您的代码免受黑客攻击/滥用/等。你会花太多时间在上面。只需购买一个包以保护基础知识,然后继续前进。

答案 17 :(得分:0)

同一枚硬币的两面。除了意图 - 问题是什么?相同的技能,不同的实施。

答案 18 :(得分:0)

通过学习他们的方式,他开始思考他们的方向。然后他必须选择他想要“属于”哪一方。

技术本身没有任何恶意......知识是纯粹的......它是如何使用它来决定如何看待它。

答案 19 :(得分:0)

你必须了解'坏人'使用的方法,所以必须要有一些理解。

对于普通开发人员,我认为只要了解他们正在做的事情的基本原则就足以避免在他们的项目中造成漏洞。

对于在安全相关领域工作的人(想到银行业务,或网上商店的信用卡数据),需要更深入的了解。那些开发人员需要深入了解“坏人”的运作方式以及他使用的技术。

答案 20 :(得分:0)

当我听到blackhat这个词时,我想到有人利用计算机知识闯入银行并做其他恶作剧。白帽知道黑帽子所知道的所有,但是不会对它做任何坏事。

因此,您没有 care 知道“黑帽子”是安全的......

了解黑帽如何思考,当你已经是一个等同的白帽并没有帮助蹲下。这就像知道,“约翰想要闯入我的房子并窃取我的iPod音乐”。如果你真的关心你的iPod音乐,那么无论如何你都应该保护它。