我会在本文介绍我是如何与r2c的另一位开发人员成功识别日志中的数据泄漏,从而修复了该漏洞并彻底杜绝其今后的再发生,整个过程只需几个小时就可以完成了。
作为一名开发人员和工程经理,我一直痴迷于寻找一种可以不需要安全团队完全参与,即可快速解决整个涉及组织安全漏洞的方法。
为什么要这么做呢?好处有很多:
我将以上过程称为“self-service DevSec。
接下来,我将介绍我们在日常开发工作过程中遇到的一个安全漏洞。我将讨论我们如何发现此漏洞的,以及如何在短短几个小时内修复整个安全漏洞,并使用Semgrep防止该漏洞再次发生。Semgrep是一个开源工具,用于使用熟悉的语法进行轻量级静态分析。
上个月,我正在与r2c的另一位工程师Clara McCreery一起调试Flask Web应用验证流程。就像许多工程师面临着令人困惑的调试问题一样,我们的第一步就是将Web应用程序放入调试日志记录。
具体来说,我们想知道数据库操作的情况,因此我们将ORM(在本例中,我们使用SQLAlchemy)设置为INFO级别的日志记录,方法如下:
这会将SQLAlchemy配置为记录所有SQL语句以及传递的参数,让我们看一下我们看到的一些输出结果:
我们绝对不应该记录令牌,即使已安全地对其进行哈希处理。在此示例中,处于讲解的目的,实际令牌值已更改。
首先要制定一个计划
至此,我们已经确定了一个安全漏洞,并且希望在保留检查日志能力的同时修复此漏洞。具体步骤如下:
接下来,我将指导你完成每个步骤。需要注意的是,我们能够在几个小时内完成整个流程,而无需与安全团队合作。
缓解当前的安全漏洞
这里的缓解措施非常简单,因为我们已经知道了漏洞的根本原因,为此可以快速还原日志记录的更改过程。然后,我们可以对日志进行快速审核,以确保仅泄漏了开发测试令牌。
永久解决方案
那我们如何防止SQLAlchemy记录敏感数据?
第一步是阅读文档。快速搜索“引擎日志中的sqlalchemy隐藏参数”将我们链接到SQLAlchemy Engine文档。稍后进行详细阅读,这样我们就发现了hide_parameters标志,该标志防止日志记录框架在日志或异常中发出任何参数。
虽然这肯定可以防止发现的安全漏洞,但对我们来说信息量太小了,因为我们想知道例如数据库ID等信息,以便进行调试。
真正的解决方案
然后,我们检查了相关的SQLAlchemy源代码,相关代码在sqlalchemy / engine / base.py中:
sql_util._repr_params依次运行:
通过研究trunc,我们发现它通过将参数的repr截断为最大字符数来转换参数值,这意味着我们应该重写参数对象的repr方法以防止敏感日志记录。
此时,我们像优秀的工程师一样,使用了一条懒惰的策略,因为我发现的这个GitHub漏洞,Mike Bayer已经发布了一个很好的解决方案,所以我就进行了一些复制,关键代码如下:
这段代码的作用是什么?你可以发现它用新的ObfusCatedString.Repr参数替换了我们原来的str参数。登录时或发出异常消息时,该字符串将替换为我们的********。由于参数仍然被绑定为原始字符串(通过impl = types.String),因此仍然插入和从数据库中选择正确的值。
要使用这个新的字段类型,我们设置令牌的字段类型如下:

然后,我们重新启用INFO日志记录,并检查我们是否正确混淆了文本:
为了完整起见,我们还在开发数据库控制台中验证了是否存储和检索了正确的值。
执行过程
应该说,我们已经暂时解决了安全漏洞,以便可以重新调试原始的身份验证漏洞。但要彻底修复整个漏洞。我们将如何做?
以下有一些想法,我相信我们都曾经遇到过:
如果要从这篇博客文章中得出一个中心结论的话,那就是:这些都不是理想的解决方案,原因如下:
幸运的是,Semgrep为我们提供了一个简单的解决方案:在代码中定义一个不变量,并在每次CI运行时使用Semgrep扫描对其进行强制执行。
在r2c中,我们使用GitHub操作在每个合并请求上运行Semgrep。我们使用由Semgrep .dev管理的管理策略、规则字段表和通知设置来定义Semgrep应该运行哪些检查。
为了保证我们的代码不会再出现问题,我访问了semgrep.dev/editor并编写了一个快速规则来检测潜在的不安全日志SQLAlchemy字段。
这是Semgrep的YAML定义语言中的规则定义:
这个规则有什么作用?详细解释如下:
然后快速地按下“部署到策略”按钮,就可以保证所有的web应用程序都得到了保护。
通过我们的VS Code扩展将Semgrep集成到编程工作流中的开发人员也会开始在他们的IDE中产生效果。
请注意,此解决方案是有意迭代的:我们可能会发现更多字段名称被标识为敏感字段,或者还希望包含db.Text类型。幸运的是,这是一个快速修订,并根据需要重新部署。
总结
在这篇文章中,我演示了你作为一名开发人员或管理人员如何使用轻量级静态分析(如Semgrep)来帮助在代码中强制执行不变量。
在r2c中,我们习惯性地使用Semgrep来防止自己重复犯错误:意外地使调试器处于提交状态?有一条规则可以防止这种情况发生。当我们发现导入某个库会减慢程序的初始化速度时,我们编写了一条规则来确保它被延迟加载。
如何扫描对方系统漏洞?
现在,扫描的方法很多,可以使用Ping、网路邻居、SuperScan、NMAP、NC等命令和工具进行远程计算机的扫描,其中SuperScan的扫描速度非常快,而NMAP的扫描非常的专业,不但误报很少,而且还可以扫描到很多的信息,包括系统漏洞、共享密码、开启服务等等。 我们要针对这些扫描进行防范,首先我们要禁止ICMP的回应,当对方进行扫描的时候,由于无法得到ICMP的回应,扫描器会把存在的计算机误认为主机不存在,从而达到保护自己的目的。 现在很多的防火墙都有禁止ICMP的设置,而Windows XP SP2自带的防火墙也包括该功能。 另外,通过其他专业的防火墙软件不但可以拦截来自局域网的各种扫描入侵,从软件的日志中,我们还可以查看到数据包的来源和入侵方式等。 这里以天网防火墙为例,为大家进行讲解。 运行天网防火墙,点击操作界面中的“IP规则管理”命令,弹出“自定义IP规则”窗口。 去掉“允许局域网的机器用ping命令探测”选项,最后点击“保存规则”按钮进行保存即可。
为什么我电脑聊QQ时一截图就蓝屏死机
Windows /XP蓝屏信息非常多,但它们产生的原因往往集中在不兼容的硬件和驱动程序、有问题的软件、病毒等,因此首先提供一些常规的解决方案,在遇到蓝屏错误后,应先对照这些方案进行排除。 1.重启 有时只是某个程序或驱动程序一时犯错,重启后它们会改过自新。 2.新硬件 首先,应该检查新硬件是否插牢,这个被许多人忽视的问题往往会引发许多莫名其妙的故障。 如果确认没有问题,将其拔下,然后换个插槽试试,并安装最新的驱动程序。 同时还应对照微软网站的硬件兼容列表检查一下硬件是否与操作系统兼容。 如果你的硬件没有在表中,那么就得到硬件厂商网站进行查询,或拨打他们的咨询电话。 3.新驱动和新服务 如果刚安装完某个硬件的新驱动,或安装了某个软件,而它又在系统服务中添加了相应项目(比如:杀毒软件、CPU降温软件、防火墙软件等),在重启或使用中出现了蓝屏故障,请到安全模式来卸载或禁用它们。 4.检查病毒 比如冲击波和震荡波等病毒有时会导致Windows蓝屏死机,因此查杀病毒必不可少。 同时一些木马间谍软件也会引发蓝屏,所以最好再用相关工具进行扫描检查。 5.检查BIOS和硬件兼容性 对于新装的电脑经常出现蓝屏问题,应该检查并升级BIOS到最新版本,同时关闭其中的内存相关项,比如:缓存和映射。 另外,还应该对照微软网站的硬件兼容列表检查自己的硬件。 还有就是,如果主板BIOS无法支持大容量硬盘也会导致蓝屏,需要对其进行升级。 6.检查系统日志 在“开始→运行”中输入“”,回车后打开“事件查看器”,注意检查其中的“系统日志”和“应用程序日志”中标明“错误”的项。 7.查询停机码 把蓝屏中密密麻麻的E文记下来,接着到其他电脑中上网,进入微软帮助与支持网站:,在左上角的“搜索(知识库)”中输入停机码,比如:0xE,接着在下面首先选择“中文知识库”,如果搜索结果没有适合信息,可以选择“英文知识库”再搜索一遍。 一般情况下,会在这里找到有用的解决案例。 另外,在网络、Google等搜索引擎中使用蓝屏的停机码或后面的说明文字做为关键词搜索,往往也会有意外收获。 8.最后一次正确配置 一般情况下,蓝屏都出现于更新了硬件驱动或新加硬件并安装其驱动后,这时Windows 2000/XP提供的“最后一次正确配置”就是解决蓝屏的快捷方式。 重启系统,在出现启动菜单时按下F8键就会出现高级启动选项菜单,接着选择“最后一次正确配置”。 9.安装最新的系统补丁和Service Pack 有些蓝屏故障是Windows本身存在缺陷造成的,因此可通过安装最新的系统补丁和Service Pack来解决。
电脑蓝屏的原因
WINDOWS XP在系统不当操作或者系统崩溃的时候会自动重新启动,蓝屏是系统为重启的原因和错误的地方作解释,接下来系统会自动运行CHECK工具来修正这些问题,所以这个问题不必特别处理,只需要在恢复后注意操作就可以了电脑出现蓝屏,软件和硬件的可能性都有,并不仅仅是硬盘出现坏道而引起的。 软件方面,您可以用最新的杀毒软件扫描是否有病毒,如果最近安装了新版本的驱动程序,恢复成原来使用正常的版本,问题没有解决则可以重装系统。 硬件方面,如果您超频了,那就先恢复硬件默认的频率;然后检查散热是否有问题,因为硬件过热会引起数据读取和传输错误;接下来就是用替换法检查是哪个部件的问题了,其中内存的嫌疑是最大的。 预防电脑蓝屏应该注意以下几点:定期对重要的注册表文件进行手工备份;尽量避免非正常关机,减少重要文件的丢失;对普通用户而言,只要能正常运行,就不要升级显卡、主板的BIOS和驱动程序;定期检查优化系统文件,运行“系统文件检查器”进行文件丢失检查及版本校对。 ◇解决方案:(1)使用Windows安装光盘进行修复安装;(2)如果还能进入安全模式, 可以\\开始-->运行\\: sfc /scannow(3)还可以采用提取文件的方法来解决, 进入\\故障恢复控制台\\, 使用copy或expand命令从光盘中复制或解压受损的文件. 不过, 蓝屏一般都是驱动程序文件的问题, 所以expand命令会用的都一些, 比如:蓝屏中提示文件, 因为驱动文件一般在i386\\driver压缩包里, 所以使用: expand %CDROM:\\i386\\ \\ c:\\winnt\\system\\drivers.(xp为expand %CDROM:\\i386\\ \\ c:\\windowns\\system\\drivers)如果启动时出现这些蓝屏停机码如果在Windows启动时出现蓝屏, 并出现附表一中的错误信息, 那么多半时硬件出现了问题, 请用硬件厂商提供的诊断工具来判断硬件是否存在问题, 并到其网站查看是否有最新的BIOS或固件更新程序. 如果硬件没有问题, 重装Windows 2K/XP, 若相同问题还是出现, 就只能求助专业的技术支持了.如果遇到的时附表二中的错误信息, 也只有重装Windows了, 如果不能解决问题, 建议求救专业的技术支持.1.故障检查信息***Stop 0xE(0xC,0xFDE38AF9,0x,0x7E8B0EB4)KMODE_EXCEPTION_NOT_HANDLED ***其中错误的第一部分是停机码(Stop Code)也就是STOP 0xE, 用于识别已发生错误的类型, 错误第二部分是被括号括起来的四个数字集, 表示随机的开发人员定义的参数(这个参数对于普通用户根本无法理解, 只有驱动程序编写者或者微软操作系统的开发人员才懂). 第三部分是错误名. 信息第一行通常用来识别生产错误的驱动程序或者设备. 这种信息多数很简洁, 但停机码可以作为搜索项在微软知识库和其他技术资料中使用.2.推荐操作蓝屏第二部分是推荐用户进行的操作信息. 有时, 推荐的操作仅仅是一般性的建议(比如: 到销售商网站查找BIOS的更新等); 有时, 也就是显示一条与当前问题相关的提示. 一般来说, 惟一的建议就是重启.3.调试端口告诉用户内存转储映像是否写到磁盘商了, 使用内存转储映像可以确定发生问题的性质, 还会告诉用户调试信息是否被传到另一台电脑商, 以及使用了什么端口完成这次通讯. 不过, 这里的信息对于普通用户来说, 没有什么意义.有时保卫科可以顺利的查到是哪个生产小组的问题, 会在第一部分明确报告是哪个文件犯的错, 但常常它也只能查个大概范围, 而无法明确指明问题所在. 由于工厂全面被迫停止, 只有重新整顿开工, 有时, 那个生产小组会意识到错误 , 不再重犯. 但有时仍然会试图哄抢零件, 于是厂领导不得不重复停工决定(不能启动并显示蓝屏信息, 或在进行相同操作时再次出现蓝屏).出现蓝屏后的九个常规解决方案Windows 2K/XP蓝屏信息非常多, 无法在一篇文章中全面讲解, 但他们产生的原因往往集中在不兼容的硬件和驱动程序、有问题的软件、病毒等, 因此首先为大家提供了一些常规的解决方案, 在遇到蓝屏错误时, 应先对照这些方案进行排除.1.重启有时只是某个程序或驱动程序一时犯错, 重启后他们会改过自新.(注意:此时参见7.查询停机码)2.新硬件首先, 应该检查新硬件是否插牢, 这个被许多人忽视的问题往往会引发许多莫名其妙的故障. 如果确认没有问题, 将其拔下, 然后换个插槽试试, 并安装最新的驱动程序. 同时还应对照微软网站的硬件兼容类别检查一下硬件是否与操作系统兼容. 如果你的硬件没有在表中, 那么就得到硬件厂商网站进行查询, 或者拨打他们的咨询电话.[color]Windows XP的硬件兼容列表:2K的硬件兼容类别:新驱动和新服务如果刚安装完某个硬件的新驱动, 或安装了某个软件, 而它又在系统服务中添加了相应项目(比如:杀毒软件、CPU降温软件、防火墙软件等), 在重启或使用中出现了蓝屏故障, 请到安全模式来卸载或禁用它们.4.检查病毒比如冲击波和振荡波等病毒有时会导致Windows蓝屏死机, 因此查杀病毒必不可少. 同时一些木马间谍软件也会引发蓝屏, 所以最好再用相关工具进行扫描检查.5.检查BIOS和硬件兼容性对于新装的电脑经常出现蓝屏问题, 应该检查并升级BIOS到最新版本, 同时关闭其中的内存相关项, 比如:缓存和映射. 另外, 还应该对照微软的硬件兼容列表检查自己的硬件. 还有就是, 如果主板BIOS无法支持大容量硬盘也会导致蓝屏, 需要对其进行升级:小提示:BIOS的缓存和映射项Video BIOS Shadowing (视频BIOS映射)Shadowing address ranges(映射地址列)System BIOS Cacheable(系统BIOS缓冲)Video BIOS Cacheable(视频BIOS缓冲)Video RAM Cacheable(视频内存缓冲)6.检查系统日志在开始-->菜单中输入, 回车出现\\事件查看器\\, 注意检查其中的\\系统日志\\和\\应用程序日志\\中表明\\错误\\的项.7.查询停机码把蓝屏中密密麻麻的E文记下来, 接着到其他电脑中上网, 进入微软帮助与支持网站在左上角的\\搜索(知识库)\\中输入停机码, 如果搜索结果没有适合信息, 可以选择\\英文知识库\\在搜索一遍. 一般情况下, 会在这里找到有用的解决案例. 另外, 在baidu、Google等搜索引擎中使用蓝屏的停机码或者后面的说明文字为关键词搜索, 往往也会有以外的收获.8.最后一次正确配置一般情况下, 蓝屏都出现于更新了硬件驱动或新加硬件并安装其驱动后, 这时Windows 2K/XP提供的\\最后一次正确配置\\就是解决蓝屏的快捷方式. 重启系统, 在出现启动菜单时按下F8键就会出现高级启动选项菜单, 接着选择\\最后一次正确配置\\.9.安装最新的系统补丁和Service Pack有些蓝屏是Windows本身存在缺陷造成的, 应此可通过安装最新的系统补丁和Service Pack来解决.经典蓝屏案意义破解检查BIOS和硬件兼容性对于新装的电脑经常出现蓝屏问题, 应该检查并升级BIOS到最新版本, 同时关闭其中的内存相关项, 比如:缓存和映射. 另外, 还应该对照微软的硬件兼容列表检查自己的硬件. 还有就是, 如果主板BIOS无法支持大容量硬盘也会导致蓝屏, 需要对其进行升级.相信我的回答能令你满意。 以上的网址都可以用,不要管他。 1.Windows XP有BugWindows XP有一个关机故障的Bug,如果你的计算机在关机过程中时常出现关机蓝屏,而且该故障是间歇性的,按下“Ctrl+Alt+Delete”键也毫无反应,那么可以肯定你的系统还没有打上相应的补丁。 请下载SP1补丁包打上补丁,一般就可以了。 2.创新声卡的驱动有问题如果你使用的是创新声卡,并且在关机过程中出现蓝屏,错误码是“0X0A”,那么,请进入设备管理器,将声卡删除,刷新后,手动安装最新的带有数字签名的驱动程序。 3.罗技鼠标、键盘不完善如果你使用的是罗技的网络键盘,并且安装了Key Commander软件来驱动键盘相应的网络功能,则有可能造成关机变成重启故障。 如果你的罗技鼠标的驱动程序是MouseWare8.6,则会造成关机蓝屏故障,你只有卸载该驱动才能解决问题。 关机却不能自动切断电源在关机过程中,一切正常,但是却停止在“您可以安全地关闭计算机了”却无法自动切断电源,需要手动按主机箱面板上的“Power”键来关机。 造成出现该故障的原因一般有以下几个方面:1. 没有开启电源支持依次点击“开始→设置→控制面板→电源选项→高能电源管理”,勾选“启用高级电源管理支持”即可。 2.BIOS设置有误可能是误修改了BIOS中有关电源管理的选项,如果你对BIOS设置比较熟悉,请进入BIOS,试着修改BIOS中有关电源管理的选项。 如果你对BIOS不熟悉,那么干脆选择“Load default setup”选项,恢复BIOS到出厂时默认的设置即可。 3.Office XP也惹祸Office XP当中一直是一个颇有争议的问题。 是微软的文本服务文件,只要用户安装了Office XP并且安装了“可选用户输入方法组件,这个文件就会自动调用它,为语音识别、手写识别、键盘以及其它用户输入技术提供文字输入支持。 即使我们没有启动 Office XP,照样在后台运行。 就是它,往往造成了关机故障,你不妨将其卸载试试。 依次点击“开始→设置→控制面板→添加/删除程序”,在目前已安装的程序中选中“Microsoft Office XP Professionain With FrontPage”,点击“更改”按钮,在“维护模式选项”对话框中选择“添加或删除功能”选项,点下一步,弹出“为所有Office应用程序和工具选择安装选项”对话框,展开“Office共享功能”选项,选中“中文可选用户输入方法”选项,在弹出菜单中选择“不安装”,点“更新”按钮即可。 4.APM/NT Legacy Node没有开启一般情况下APM/NT Legacy Node没有开启可能造成关机却不能自动切断电源。 进入设备管理器,点菜单栏中的“查看→显示隐藏的设备”,显示出系统中所有的隐藏设备。 在设备列表框中查看有无APM/NT Legacy Node选项。 如果你的电脑支持此功能,就会有该选项,双击,在弹出的属性对话框中,点击“启用设备”按钮即可。 或磁道。
发表评论