当前位置: 首页 > 科技观察

如何使用Whispers识别静态结构化文本中的硬编码敏感信息

时间:2023-03-20 11:50:06 科技观察

关于WhispersWhispers是一个强大的静态代码分析工具,可帮助研究人员解析各种常见数据格式并搜索硬编码凭据和危险函数。Whispers支持在命令行终端中运行,也可以集成到CI/CD管道中。检测功能密码API令牌AWS密钥私钥凭据哈希身份验证令牌危险函数敏感文件格式支持Whispers本质上是一个结构化版本分析工具,而不是代码分析工具。下面列出了当前版本的Whispers支持的数据格式:YAMLJSONXML.npmrc.pypirc.htpasswd.propertiespip.confconf/iniDockerfileDockercfgShell脚本Python3Python3文件将使用AST进行解析,因为这是本机语言支持。声明和赋值格式该工具可以将以下语言文件解析为文本并检测常见的变量声明和赋值模式:JavaScriptJavaGoPHP特殊格式支持AWS凭证文件JDBC连接字符串Jenkins配置文件SpringFramework配置文件Java属性文件Dockercfg注册身份验证文件GitHub通过PyPI安装令牌工具:pip3installwhispersfileOrDirwhispers--output/tmp/secrets.ymlsource/code/fileOrDirwhispers--rulesaws-id,aws-secretsource/code/fileOrDirwhispers--severityBLOCKER,CRITICALsource/code/fileOrDirwhispers--exitcode7source/code/fileOrDirPython:fromwhispers.cliimportparse_argsfromwhirunspers.core"tests/fixtures"configfile="whispers/config.yml"args=parse_args(["-c",configfile,src])forsecretinrun(args):print(secret)工具配置Whispers工具支持多个配置选项,我们可以配置是否在结果中包含文件路径、键或其他值等,如所愿编辑。config.yml的引用格式如下:include:files:-"**/*.yml"exclude:files:-"**/test/**/*"-"**/tests/**/*"keys:-^foovalues:-bar$rules:starks:message:WhispersfromtheNorthseverity:CRITICALvalue:regex:(Aria|Ned)Starkignorecase:True最快的配置方法是复制配置。它作为参数传递给Whispers:whispers--configconfig.yml--rulessstarkssrc/file/or/dir自定义规则我们可以通过以下方式在whispers/rules文件中添加和编辑自己的自定义规则:rule-id:#uniquerulenamedescription:ValuesformattedlikeAWSSessionTokenmessage:AWSSessionToken#reportwillshowthismessageseverity:BLOCKER#oneofBLOCKER,CRITICAL,MAJOR,MINOR,INFOkey:#specifykeyformat正则表达式:(aws.?session.?token)?ignorecase:True#case-insensitivematching?value=regex.*[a-z])(?=.*[A-Z])[A-Za-z0-9\+\/]{270,450}$ignorecase:False#case-sensitivematchingminlen:270#valueisatleastthislongisBase64:True#valueisbase64-encodedisAscii:False#valueisbinarydatawhendecodedisUri:False#valueisnotformattedlikeaURIsimilar:0.35#maximumallowedsimilaritybetweenkeyandvalue#(1.0beingexactlythesame)pluginWhispers所有的解析功能都是通过插件实现的,每个插件都会使用pairs()方法实现一个类,返回符合规则的键值对:classPluginName:defpairs(self,file):yield"key","value"项目地址私语:[GitHub传送门]