STATEMENT
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
分子实验室 https://molecule-labs.com/
前言
相关说明及声明:
文章原文为K A, Monnappa. 2018年发表的《Learning Malware Analysis》,本文的相关内容均为相关内容翻译及实践记录,仅为学术交流使用,如要引用请做原文引用如下所示:
[序号]K A, Monnappa. Learning Malware Analysis[M]. 2018.06. Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK.
许久没更新了,由于前段时间精力放在另一边,二进制这边一直放小同学这边维护,也是因为种种原因还是需要自己来把坑填完,近期接着之前的进度终于啃完了这一章,这里给大家继续同步K A, Monnappa.《Forensic Learning Malware Analysis》精要翻译,以及翻译过程中的一些小实践记录。
此外,我们成立了一个二进制交流群大家对二进制方面如果有兴趣欢迎来群里一起参与知识库的维护,不定期组织交流,氛围搞起来,让有兴趣的同学们有个归属~
dingding联系@xtpeeps
使用IDA反汇编
代码分析常用语了解恶意样本内部源码不可见时使用。
1. 代码分析工具
代码分析工具可以根据他们的功能、描述、数量进行分类。
反汇编程序是一个可以将机器语言转汇编代码;并且可以静态代码分析。静态代码分析可以在不执行二进制程序的时候让你了解到程序的行为。
一个调试器是个应用程序同时也是可以反汇编代码;除此之外也可以执行控制汇编二进制执行。使用调试工具,你不仅可以执行单条指令,或选择函数,或执行整个程序。调试工具可以动态分析,还可以在程序执行的过程中检查可疑的二进制。
反编译器是一个将机器码转成更高级语言的程序(伪代码)。反编译器能够很好辅助反推工程进程并能够简化工作。
2. 静态代码分析(使用IDA反汇编)
Hex-Rays IDA pro
https://www.hex-rays.com/products/ida/
IDA是最有影响力且流行的商业反编译调试工具;常被用于逆向工程,恶意病毒分析以及脆弱性研究。IDA可以运行在不同平台(macOS、Linux和windows)支持分析不同的文件类型(PE/ELF/Macho-O)。除商业版本之外,IDA还提供2个其他版本:IDA demo版本(评估版本)和IDA免费版本;两个版本都有一定的限制,都可以反编译32和64位windows程序,但是免费版无法调试二进制,demo版本无法调试64位二进制,demo版本也无法保存数据库,并且demo版本和免费版都无法支持IDApython。
本部分和下一部分将会看下IDA pro的特征,并且使用IDA施行静态代码分析。这一部分仅包含与恶意代码分析相关的功能。
IDA相关深入了解图书推荐《The IDA Pro Book》by Chris Eagle
2.1 在IDA中加载二进制
IDA会像windows一样加载文件到内存中。IDA可以通过判断文件头确定最可能适合的加载器。在选择文件后IDA会加载对话框,用于确认合适的加载起和进程类型。文件设置(file option)选项是用于加载未识别的文件,一般使用该选项处理shellcode。默认情况下IDA不会在反编译中加载PE头和源部分。通过使用手动加载checkbox选项,可以手动选择加载基址和加载位置,IDA将会在加载的每个部分包括PE头给予相应的提示。点击OK,IDA将文件加载到内存,并且开始反编译相关代码。
2.2 扩展IDA显示
IDA桌面版结合了很多静态分析工具的特征到一个单独特窗口中。下面将对IDA卓敏啊版和它不同窗口进行介绍。其包含多个不同的标签(IDA View-A,Hex View-1,等等),也可以通过点击添加标签按钮或者点击View/open subviews菜单进行添加。
2.2.1 反汇编窗口
当二进制文件被加载,IDA展示的窗口就是反汇编编辑窗口(也叫做IDA-view窗口),这是个主要窗口,用于分析和展示反汇编代码,并且可以用于分析反汇编二进制。
IDA可以使用两个模式展示反编译的代码:Graph view(graph diassembly view)和Text view(实际应该叫text diassembly view),默认进入的是graph view,这里可以使用空格快捷键进行切换。
在graph view模式下,IDA一次只显示一个函数,在一个流程图的窗口中函数在基本块区中断。这个模式可以快速识别分支和循环生命。在Graph view模式下,颜色和箭头的指示方向都是根据判断显示的。条件跳转使用红色和绿色的箭头,true条件用绿色箭头表示,false使用红色箭头表示。蓝色的箭头是被用来表示无条件跳转,循环使用的是向上的蓝色的箭头表示。在graph view中虚拟地址默认不显示(每个基础块仅显示最基本的信息展示)。如果需要显示虚拟地址信息,需要点击Options/general然后点击Line prefixes以启用。
下图中可以观察到条件跳转中,绿色箭头(条件true)进行跳转,对应的虚拟地址也是跳转,而红色箭头指向正常的数据流,虚拟地址为连续。
在text view模式中,整个反编译目前处于线性方式展示。整个虚拟地址默认展示,<section name>:<virtual address>格式。在text view窗口中最左边的部分被称为箭头窗口,用于展示程序的非线性流。虚线箭头代表条件跳转,实线箭头表示无条件跳转,加粗的箭头表示循。
2.2.2 函数窗口function widnow
函数窗口显示所有IDA识别出来的函数,该窗口同时也显示每个函数可以被找到的虚拟地址,每个函数的大小,以及其他函数相关信息。双击可以定位跳转到对应函数的位置。每个函数与大量的标志相关联(例如R、F、L等等标志)。通过F1按钮可以获取更多关于相关标志的帮助信息。一个有用的标志L标志,代表函数的库函数。库函数是编译器产生而非恶意软件作者编写的函数;从代码分析的角度来看,恶意样本分析的重点应该在恶意代码上,而不是库函数本身。
2.2.3 输出窗口out window
输出窗口展示的是IDA以及IDA插件输出的相关信息。这些对于分析恶意样本以及样本对系统操作分析提供很多信息。可以通过查看输出在output窗口的内容可以获取IDA执行加载过程中的相关信息。
2.2.4 十六进制窗口Hex view window
通过点击HexView-1标签可以展示Hex窗口。Hex窗口可以展示一系列的十六进制转储内容以及ASCII字符。默认情况下,十六进制窗口(hex window)。默认情况下十六进制窗口同步反编译窗口(disassembly window)内容;也就是在反汇编窗口中选择了一部分字节的数据,相应的在十六进制窗口中同样的会进行标记高亮相关的内容,这对于标记内存地址很有帮助。
2.2.5 结构窗口structures window
点击structures windows标签,可以进入借口窗口。结构窗口展示程序使用的标准的数据结构,并且允许创建自建的数据结构。
2.2.6 引用窗口imports window
引用窗口是所有二进制程序引用的函数的列表。展示了引用的函数以及相关函数引用的库函数内容。
2.2.7 出口窗口exports window
出口窗口展示的是程序出口函数的列,出口函数通常在DLL动态链接库中,因此对于分析恶意样本DLL时有用。
2.2.8 字符窗口string window
IDA默认不展示字符窗口,你可以通过点击view/open subviews/strings(或者使用Shift+F12快捷方式打开)字符窗口。字符窗口展示的是从二进制和地址中能够发现字符列表。默认情况下,字符窗口仅展示长度不小于5的null-terminated ASCII字符串。有些恶意样本的二进制使用的是UNICODE字符。可以通过配置IDA显示不同的字符,右击Setup(或者Ctrl+U)检测Unicode C-style(16比特),点击ok即可。
2.2.9 段窗口segments window
段窗口可以通过view/open subviews/segments(或者使用shift+F7开启)。段窗口是展示(.text,.data等等)部分内容的列表。显示信息包括开始地址,以及结束地址,每个部分的内存权限。开始和结束的地址都有每个部分的虚拟地址的详细说明,可用于定位对应内存中的位置。
2.3 使用IDA提高反汇编
本部分将结合之前相关的知识内容进行反编译分析。考虑下面一个小程序从一个本地函数拷贝到另外一个变量中:
int main()
{
int x=1;
int y;
y=x;
return 0;
}
以上代码编译之后在IDA反汇编之后如下:
.text:00401000 ; Attributes: bp-based frame ➊
.text:00401000
.text:00401000 ; ➋ int __cdecl main(int argc, const char **argv, const char **envp)
.text:00401000 ➐ _main proc near
.text:00401000
.text:00401000 var_8= dword ptr -8 ➌
.text:00401000 var_4= dword ptr -4 ➌
.text:00401000 argc= dword ptr 8 ➌
.text:00401000 argv= dword ptr 0Ch ➌
.text:00401000 envp= dword ptr 10h ➌
.text:00401000
.text:00401000 push ebp ➏
.text:00401001 mov ebp, esp ➏
.text:00401003 sub esp, 8 ➏ .text:00401006 mov ➍ [ebp+var_4], 1
.text:0040100D mov eax, [ebp+var_4] ➍
.text:00401010 mov ➎ [ebp+var_8], eax
.text:00401013 xor eax, eax
.text:00401015 mov esp, ebp ➏
.text:00401017 pop ebp ➏
.text:00401018 retn
当加载可执行之后,IDA在每一个函数执行分析,反汇编确定栈框架。除此之外,使用大量的签名和运行特殊算法匹配提供IDA识别反汇编函数。注意到➊在执行过初始化分析之后,IDA添加了一个批注,用分号开头;这意味着ebp寄存器被局部变量和函数参数使用(前章节提到的函数在ebp堆栈寄存器基址中)。在➋中,IDA使用其规则可以确定main函数并添加在关于此函数的批注,这一特点可以用于确定函数需要接收多少个参数,以及参数的类型。
在➌中,IDA提供了一个总的栈的视角,IDA能够判断局部变量和函数参数。在主函数中IDA定义两个局部变量,并自动命名为var_4和var_8并分别赋值。-4和-8对应着与dbp(框架指针)的距离。➍和➎是IDA替换[ebp-4]与[ebp-8]的内容。
IDA会自动对变量或参数进行命名,并在代码中应用这些名称;IDA标记的var_xxx和arg_xxx可以节约人工标记并替换参数的工作,并便于识别变量名和参数。
function prologue, funcktion epilogue和在➏中用于分配的空间给局部变量的指令可以简易的忽略。这些函数仅用于设定函数的环境。梳理之后汇编代码简化为:
.text:00401006 mov [ebp+var_4], 1
.text:0040100D mov eax, [ebp+var_4]
.text:00401010 mov [ebp+var_8], eax
.text:00401013 xor eax, eax
.text:00401018 retn
2.3.1 重命名地址
当分析恶意病毒的时候,可以将这些变量或函数改成更有意义的名字。有劲啊变量或者参数名,选择重命名(rename或者按快捷键“N”)。当重命名之后IDA将会同步新名字到与其相关的项目上。通过重命名可以给予变量或函数更加有意义的名字。
.text:00401006 mov [ebp+x], 1
.text:0040100D mov eax, [ebp+x]
.text:00401010 mov [ebp+y], eax
.text:00401013 xor eax, eax
.text:00401018 retn
2.3.2 IDA标注功能
标注对于提示某一函数的作用很有帮助。为了添加一个合规的注释,首先将光标放在任何一个反编译列表里的一行中,然后使用快捷键(“:”),通过在新的对话框中填写相关信息并确定,完成相关备注。
.text:00401006 mov [ebp+x], 1
.text:0040100D mov eax, [ebp+x]
.text:00401010 mov [ebp+y], eax
.text:00401013 xor eax, eax
.text:00401018 retn
常规的备注对于单行描述但行比较有用(多行也可以),但是如果可以把描述汇总到一起描述,类似主函数的描述就更好了。IDA提供了另一种备注,函数备注,允许组合备注,并且可以显示在函数反汇编列中。首先选择函数所在的虚拟地址,然后通过快捷键“:”添加备注即可,这里为sub_140001230,伪代码添加函数备注。可以看到这些备注与函数使用相同的虚拟地址。
当前相关修改参数变量名称、添加备注的名称都只保存在IDA的数据库中,并没有保存在二进制可执行文件中。
2.3.3 IDA 数据库
当可执行文件加载到IDA中,就会在工作目录中创建一个数据库该数据库一共包含5个文件(扩展名为:.id0,.id1,.nam,.id2以及.til)。每一个文件保存了大量的与可执行文件匹配的相关信息。这些文件被压缩和归档到以.idb(32进制)压缩文件中。当加载可执行程序后,从中读取创建信息保存在数据库中。大量的信息展都保存在数据库中以用于展示代码分析时有用的信息。任何的修改操作(如重命名,注释批注等等)都会显示在view中并且般存在数据库中,但是这些修改并不会修改原二进制文件。你可以通过关闭IDA保存数据库;当关闭IDA的时候将会提示是否保存数据库的提示框。默认情况下数据库包配置(默认配置)会将所有文件保存在IDB(.idb)或者i64(.i64)。当重新打开.idb或者.i64文件的时候,会看到重命名的变量和标注都在。
下面通过另一个简单的程序了解IDA的其他扩展特征。全局变量a、b,在主函数中赋值。参数x、y以及string为局部变量;a赋值给x,y和string都是保存的地址。
int a;
char b;
int main()
{
a = 41;
b = 'A';
int x = a;
int *y = &a;
char *string = "test";
return 0;
}
程序转化为下面的反汇编列表。IDA也定义了全局变量和匹配名字例如dword_403374和byte_403370;记录如何补充内存地址并且在全局变量中被关联。当一个变量被定义之后在全局数据区域,对编译器来说变量的地址和变量的大小是明确的。全局的假的变量名被IDA详细知名变量的地址以及他们确切的数据类型。例如dword_403374则是说地址为0x403374可以接受dword(4bytes大小)的值。
IDA使用offset关键字表示变量地址被使用(而不是现实他们的值),当var_8、var_c被分配局部变量值时,可以认为他们被分配了值(指针变量值)。IDA使用aTest给地址确定字符(字符变量),这个名用于表示字符串,test用于添加批注。
.text:00401000 var_C= dword ptr -0Ch ➊
.text:00401000 var_8= dword ptr -8 ➊
.text:00401000 var_4= dword ptr -4 ➊
.text:00401000 argc= dword ptr 8
.text:00401000 argv= dword ptr 0Ch
.text:00401000 envp= dword ptr 10h
.text:00401000
.text:00401000 push ebp
.text:00401001 mov ebp, esp
.text:00401003 sub esp, 0Ch
.text:00401006 mov ➋ dword_403374, 29h
.text:00401010 mov ➌ byte_403370, 41h
.text:00401017 mov eax, dword_403374 ➍
.text:0040101C mov [ebp+var_4], eax
.text:0040101F mov [ebp+var_8], offset dword_403374 ➎
.text:00401026 mov [ebp+var_C], offset aTest ; "test" ➏
.text:0040102D xor eax, eax
.text:0040102F mov esp, ebp
.text:00401031 pop ebp
.text:00401032 retn
2.3.4 格式化转化操作数
在➋和➌中操作数(29h和41h)代表16进制格式数值,然而在源码中我们使用十进制的41和字符“A”。IDA可以将16进制值编码为十进制、八进制、二进制。ASCII也可以转为字符型。例如,如果要修改41h格式的值,右击在这个值上选择即可。
2.3.5 导航地址
IDA的另一个特征是可以在程序中导航任意地址更加方便。当程序被反编译,IDA就会标记每一个程序中的地址,双击字符则会在显示中跳转到对应字符所在的位置。如函数名或变量。
IDA保持跟踪导航历史;任何时候被重定向到另外一个地址,都可以使用返回按钮返回之前的地址。
跳转到指定地址可以点击jump/jump to Address(或者使用快捷键G)来跳转到地址。点击OK完成跳转。
2.3.6 交叉参考cross References
其他方式导航是通过交叉参考实现(也称为Xrefs)。交叉参考链接与地址链接关联。交叉参考可以不仅数据交叉,也可以代码交叉参考。
数据交叉参考描述了数据在二进制中如何交互。如➐、➑、➒。例如数据交叉,➑描述的是数据与命令相关联,从主函数开始偏移0x6长度。字符w表示一个交叉关联写;代表命令写入内存地址。字符r代表读相互关联,代表从内存中读取信息。省略号...代表更多相关联,但是他们由于显示限制不能显示。其他种类的关联数据是一个补充(使用o表示),代表地址正在被使用,而不是内容。数组和字符型数组被开始的地址使用,因为字符数据➐被标记为一个参考偏移值。
.data:00403000 aTest db 'test',0 ➐; DATA XREF: _main+26o Similarly, double-clicking on the address dword_403374 relocates to the virtual address shown here: .data:00403374 dword_403374 dd ? ➑; DATA XREF: _main+6w
.data:00403374 ➒; _main+17r ...
一个代码交叉参考代表一个到另一个的数据流(如jump或者function调用),下面显示的一个c语言的if语句:
int x = 0;
if (x == 0)
{
x = 5;
}
x = 2;
程序反编译如下,jnz反编译为C语言中==条件语句(也就是jne或者jump,if not equal的别名);执行结束将会执行分支(如➊ to ➋)。jump交叉关联命令➌为jump天转后直行的命令,从主函数偏移0xF。字符j表示jump跳转后的结果。这里可以双击(_main+Fj)来改变跳转命令关联的显示。
.text:00401004 mov [ebp+var_4], 0
.text:0040100B cmp [ebp+var_4], 0
.text:0040100F jnz short loc_401018 ➊
.text:00401011 mov [ebp+var_4], 5
.text:00401018
.text:00401018 loc_401018: ➌; CODE XREF: _main+Fj
.text:00401018 ➋ mov [ebp+var_4], 2
之前的列可以通过按空格键切换视图查看。graph视角对于获取虚拟分支/循环说明特别有用。绿色箭头为跳转条件满足,红色箭头为跳转条件不满足,蓝色箭头为正常部分。
下面针对函数内调用函数的情况来看:
void test() { }
void main() {
test();
}
下面是main函数的反汇编列表。sub_401000代表了test函数。IDA自动使用sub_前缀命函数地址,指向子函数或者函数。例如当看到sub_401000(你可以直接把它当作子函数地址sub_401000阅读)。当然这里也可以通过双击函数名定位到函数。
.text:00401010 push ebp
.text:00401011 mov ebp, esp
.text:00401013 call sub_401000 ➊
.text:00401018 xor eax, eax
在sub_401000(test函数)开始处,IDA添加了一处代码交叉关联代码,用于代表这是函数,sub_401000,位于主函数main偏移3的位置,可以通过双击_main+3p跳转到该位置。p后缀代标控制器调用地址为(0x401000)函数的结果并继续后续的执行。
.text:00401000 sub_401000 proc near ➋; CODE XREF: _main+3p
.text:00401000 push ebp
.text:00401001 mov ebp, esp
.text:00401003 pop ebp
.text:00401004 retn
.text:00401004 sub_401000 endp
2.3.7 列出所有交叉引用
交叉参考可以在审计代码的过程中快速定位字符或者函数的引用。IDA的交叉引用是定位地址的不错的方式,但是只能显示2个参数,因此你不会看到所有的交叉参考。另外...代表还有更多的交叉引用。
如果想要列出所有的交叉参考只需要点击地址名然后按X。
一个程序通常包含很多函数。一个函数可以被一个或多个函数调用,或者调用一个或多个函数。在样本分析的时候,为了快速浏览一个函数的相关信息,例如在本例中,你可以通过选择view | open subviews | function calls 来获取函数的函数调用情况。如图所示上半部分展示函数被调用情况,下半部分展示函数调用其他函数情况。通过函数调用情况,一般就可以判断这个函数的功能情况。
2.3.8 相邻视角和图形化
IDA图形化选项是一个很好的形象化展示交叉引用的方式。在IDA图形化之前,可以使用相邻视角proximity view展示函数调用情况。点击view | open subviews | proximity browser。相邻视角中国呢,函数的数据通过节点以及交叉引用相互关联。你可以通过双击“+”钻入相邻节点函数/子函数,扩展/折叠节点。同时可以通过ctrl+鼠标滑轮,控制放大和缩小。退出相邻视角只需要在空白处右键,选择图形视图后者字符视图即可。
与自带的视图不同,IDA还可以展示第三方应用。要使用这些图形配置,可以右键工具栏,选择Graphs,会显示5个按钮:
通过点击这5个不同的视图,可以分别展示不同的展示方式,但是这5个视图不像图形化和相邻视角基于汇编视图可以交互。下面是不同的图形对应的不同的功能介绍:
展示当前函数的外部流图表。展示的图形与IDA的交互视角很像。 | |
展示当前函数的调用视图;这可以用来快速查看程序中函数调用关系情况;但如果程序的函数很多的话,这个视图就会显得非常大,被塞满。 | |
这个视图显示一个函数的被交叉引用情况;如果想看一个程序的访问某个函数的不同路径,这个视图就相对比较清晰。 | |
这个视图展示的是一个函数的交叉引用其他函数的情况;可以很清晰的展示函数调用所有其他函数。 | |
这是一个自定义交叉引用视图,这个功能可以允许使用者定义交叉引用的一些视图生成内容和方式。 |
实践IDA的各项功能有助于提高逆向的水平。下面我们将根据windowsAPI影响我们的windows操作系统。我们将学到如何分辨以及解释32位和64位Windows API的功能。
RECRUITMENT
招聘启事
安恒雷神众测SRC运营(实习生) 【任职要求】
————————
【职责描述】
1. 负责SRC的微博、微信公众号等线上新媒体的运营工作,保持用户活跃度,提高站点访问量;
2. 负责白帽子提交漏洞的漏洞审核、Rank评级、漏洞修复处理等相关沟通工作,促进审核人员与白帽子之间友好协作沟通;
3. 参与策划、组织和落实针对白帽子的线下活动,如沙龙、发布会、技术交流论坛等;
4. 积极参与雷神众测的品牌推广工作,协助技术人员输出优质的技术文章;
5. 积极参与公司媒体、行业内相关媒体及其他市场资源的工作沟通工作。
1. 责任心强,性格活泼,具备良好的人际交往能力;
2. 对网络安全感兴趣,对行业有基本了解;
3. 良好的文案写作能力和活动组织协调能力。
简历投递至
设计师(实习生)
————————
【职位描述】
负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。
【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;
3、精通photoshop/illustrator/coreldrew/等设计制作软件;
4、有品牌传播、产品设计或新媒体视觉工作经历;
【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽
简历投递至
安全招聘
————————
公司:安恒信息
岗位:Web安全 安全研究员
部门:战略支援部
薪资:13-30K
工作年限:1年+
工作地点:杭州(总部)、广州、成都、上海、北京
工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…
【岗位职责】
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责自动化平台建设
5.负责针对常见WAF产品规则进行测试并落地bypass方案
【岗位要求】
1.至少1年安全领域工作经验;
2.熟悉HTTP协议相关技术
3.拥有大型产品、CMS、厂商漏洞挖掘案例;
4.熟练掌握php、java、asp.net代码审计基础(一种或多种)
5.精通Web Fuzz模糊测试漏洞挖掘技术
6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法
7.有过独立分析漏洞的经验,熟悉各种Web调试技巧
8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)
【加分项】
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;
岗位:安全红队武器自动化工程师
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)
【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。
【岗位要求】
1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;
2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;
3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;
4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;
5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。
【加分项】
1.有高并发tcp服务、分布式等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。
简历投递至
岗位:红队武器化Golang开发工程师
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)
【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。
【岗位要求】
1.掌握C/C++/Java/Go/Python/JavaScript等至少一门语言作为主要开发语言;
2.熟练使用Gin、Beego、Echo等常用web开发框架、熟悉MySQL、Redis、MongoDB等主流数据库结构的设计,有独立部署调优经验;
3.了解docker,能进行简单的项目部署;
3.熟悉常见web漏洞原理,并能写出对应的利用工具;
4.熟悉TCP/IP协议的基本运作原理;
5.对安全技术与开发技术有浓厚的兴趣及热情,有主观研究和学习的动力,具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。
【加分项】
1.有高并发tcp服务、分布式、消息队列等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。
简历投递至
END
长按识别二维码关注我们