├── .editorconfig ├── .gitignore ├── Makefile ├── README.md ├── _build └── .gitignore ├── _static ├── 404logo_dark.png └── 404logo_light.png ├── _templates └── .gitignore ├── changelog └── index.rst ├── comm └── index.rst ├── conf.py ├── end └── index.rst ├── index.rst ├── intro └── index.rst ├── resource └── index.rst └── special ├── common_sec.rst ├── engineering.rst ├── index.rst └── special_sec.rst /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | end_of_line = lf 6 | insert_final_newline = true 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | 10 | [*.py] 11 | indent_size = 4 12 | 13 | [*.{html,css,js,json}] 14 | indent_size = 2 15 | 16 | [{*.bat,Makefile}] 17 | indent_style = tab 18 | indent_size = 4 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | *.swp 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | PAPER = 8 | BUILDDIR = _build 9 | 10 | # Internal variables. 11 | PAPEROPT_a4 = -D latex_paper_size=a4 12 | PAPEROPT_letter = -D latex_paper_size=letter 13 | ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . 14 | # the i18n builder cannot share the environment and doctrees with the others 15 | I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . 16 | 17 | .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext 18 | 19 | help: 20 | @echo "Please use \`make ' where is one of" 21 | @echo " html to make standalone HTML files" 22 | @echo " dirhtml to make HTML files named index.html in directories" 23 | @echo " singlehtml to make a single large HTML file" 24 | @echo " pickle to make pickle files" 25 | @echo " json to make JSON files" 26 | @echo " htmlhelp to make HTML files and a HTML help project" 27 | @echo " qthelp to make HTML files and a qthelp project" 28 | @echo " devhelp to make HTML files and a Devhelp project" 29 | @echo " epub to make an epub" 30 | @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" 31 | @echo " latexpdf to make LaTeX files and run them through pdflatex" 32 | @echo " text to make text files" 33 | @echo " man to make manual pages" 34 | @echo " texinfo to make Texinfo files" 35 | @echo " info to make Texinfo files and run them through makeinfo" 36 | @echo " gettext to make PO message catalogs" 37 | @echo " changes to make an overview of all changed/added/deprecated items" 38 | @echo " linkcheck to check all external links for integrity" 39 | @echo " doctest to run all doctests embedded in the documentation (if enabled)" 40 | 41 | clean: 42 | -rm -rf $(BUILDDIR)/* 43 | 44 | html: 45 | $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html 46 | @echo 47 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." 48 | 49 | dirhtml: 50 | $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml 51 | @echo 52 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." 53 | 54 | singlehtml: 55 | $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml 56 | @echo 57 | @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." 58 | 59 | pickle: 60 | $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle 61 | @echo 62 | @echo "Build finished; now you can process the pickle files." 63 | 64 | json: 65 | $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json 66 | @echo 67 | @echo "Build finished; now you can process the JSON files." 68 | 69 | htmlhelp: 70 | $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp 71 | @echo 72 | @echo "Build finished; now you can run HTML Help Workshop with the" \ 73 | ".hhp project file in $(BUILDDIR)/htmlhelp." 74 | 75 | qthelp: 76 | $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp 77 | @echo 78 | @echo "Build finished; now you can run "qcollectiongenerator" with the" \ 79 | ".qhcp project file in $(BUILDDIR)/qthelp, like this:" 80 | @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/RD_Checklist.qhcp" 81 | @echo "To view the help file:" 82 | @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/RD_Checklist.qhc" 83 | 84 | devhelp: 85 | $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp 86 | @echo 87 | @echo "Build finished." 88 | @echo "To view the help file:" 89 | @echo "# mkdir -p $$HOME/.local/share/devhelp/RD_Checklist" 90 | @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/RD_Checklist" 91 | @echo "# devhelp" 92 | 93 | epub: 94 | $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub 95 | @echo 96 | @echo "Build finished. The epub file is in $(BUILDDIR)/epub." 97 | 98 | latex: 99 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 100 | @echo 101 | @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." 102 | @echo "Run \`make' in that directory to run these through (pdf)latex" \ 103 | "(use \`make latexpdf' here to do that automatically)." 104 | 105 | latexpdf: 106 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 107 | @echo "Running LaTeX files through pdflatex..." 108 | $(MAKE) -C $(BUILDDIR)/latex all-pdf 109 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 110 | 111 | text: 112 | $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text 113 | @echo 114 | @echo "Build finished. The text files are in $(BUILDDIR)/text." 115 | 116 | man: 117 | $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man 118 | @echo 119 | @echo "Build finished. The manual pages are in $(BUILDDIR)/man." 120 | 121 | texinfo: 122 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 123 | @echo 124 | @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." 125 | @echo "Run \`make' in that directory to run these through makeinfo" \ 126 | "(use \`make info' here to do that automatically)." 127 | 128 | info: 129 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 130 | @echo "Running Texinfo files through makeinfo..." 131 | make -C $(BUILDDIR)/texinfo info 132 | @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." 133 | 134 | gettext: 135 | $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale 136 | @echo 137 | @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." 138 | 139 | changes: 140 | $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes 141 | @echo 142 | @echo "The overview file is in $(BUILDDIR)/changes." 143 | 144 | linkcheck: 145 | $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck 146 | @echo 147 | @echo "Link check complete; look for any errors in the above output " \ 148 | "or in $(BUILDDIR)/linkcheck/output.txt." 149 | 150 | doctest: 151 | $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest 152 | @echo "Testing of doctests in the sources finished, look at the " \ 153 | "results in $(BUILDDIR)/doctest/output.txt." 154 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | RD_Checklist 2 | ============ 3 | 4 | 知道创宇研发技能表 5 | 6 | 在线阅读: 7 | 8 | * Sphinx版本:https://paper.seebug.org/RD_Checklist/ 9 | 10 | 准备 11 | ---- 12 | 13 | * 使用Sphinx编辑,http://sphinx-doc.org/ 14 | * 安装:pip install Sphinx 15 | * 安装:pip install pydata-sphinx-theme 16 | * git clone https://github.com/knownsec/RD_Checklist.git 17 | 18 | 发布 HTML 格式 19 | -------------- 20 | 21 | * cd RD_Checklist 22 | * make singlehtml 23 | * cd _build/singlehtml 24 | * python3 -m http.server 25 | * 浏览器查看: http://localhost:8000/index.html 26 | 27 | 28 | License 29 | ------- 30 | 31 | ![署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)](https://licensebuttons.net/l/by-nc-sa/4.0/88x31.png) 32 | 33 | [署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh) 34 | -------------------------------------------------------------------------------- /_build/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /_static/404logo_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knownsec/RD_Checklist/0c399d880927cb6ff101d5c12cc5092b6b887f0c/_static/404logo_dark.png -------------------------------------------------------------------------------- /_static/404logo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knownsec/RD_Checklist/0c399d880927cb6ff101d5c12cc5092b6b887f0c/_static/404logo_light.png -------------------------------------------------------------------------------- /_templates/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /changelog/index.rst: -------------------------------------------------------------------------------- 1 | 版本 2 | ==== 3 | 4 | 4.0 5 | --- 6 | 7 | 2024-08 8 | 9 | * 页面风格调整 10 | * 更新《通用技能》章节 11 | 12 | + 新增《关于信息获取》 13 | + 更新好书推荐 14 | 15 | * 重构《专业技能》章节 16 | 17 | + 更新《基础必备》内容 18 | + 新增《基础运维实践》与《安全运维能力》 19 | + 新增《通用安全能力/概念》,并更新内容 20 | + 新增《专业安全能力》,并更新内容 21 | + 新增《工程化能力》 22 | 23 | - 调整《研发相关》到本小节,并更新内容 24 | 25 | * 更新《说明》与《结尾》章节 26 | 27 | * **>_ Happy Hacking ~** 28 | 29 | 3.1 30 | --- 31 | 32 | 2016-05-18 33 | 34 | * 改进 文案风格调整 35 | * 改进 重要链接和文案更新,Sebug -> Seebug 36 | * 改进 更新《专业技能》 37 | 38 | + 新增,程序员与黑客 2 39 | 40 | 3.0 41 | --- 42 | 43 | 2015-08-21 44 | 45 | * 改进 更新《说明》章节,并替换离线包 46 | * 改进 更新《通用技能》章节 47 | 48 | + 新增《Who am I》小节,并调整《牛人姿态》到本章节,并更新内容 49 | + 新增《如何做事》小节 50 | 51 | - 调整《方法论》从《成长》到本小节 52 | - 调整《任务拆分》从《成长》到本小节,并更新内容 53 | - 调整《任务四象限》到本小节,并更新内容 54 | - 调整《沟通、反馈与责任》到本小节,并更新内容 55 | - 新增《团队意识》 56 | 57 | + 更新《成长》小节 58 | 59 | - 调整《新事物的敏感性》到本小节,并更新内容 60 | 61 | + 更新《好书推荐》小节 62 | 63 | * 改进 更新《专业技能》章节 64 | 65 | + 《Web 安全》小结增加《工具》 66 | + 新增《嵌入式安全》小节 67 | + 更新其它小结 68 | 69 | * 改进 拆分《优质资源》为独立章节 70 | 71 | + 更新《站点》小节 72 | + 新增《书》、《RSS 订阅》、《威胁情报》、《安全平台》小结 73 | 74 | * 新增 《结尾》章节 75 | 76 | 2.2 77 | --- 78 | 79 | 2014-03-09 80 | 81 | * 新增 专业技能的几个章节,编码环境、爬虫进阶、调度、并发、数据结构、DevOps、调试、持续集成、协作 82 | * 新增 专业技能 - 优质资源 83 | * 新增 专业技能 - 牛人1,2,3 84 | * 改进 通用技能 - 新事物的敏感性,修改部分文字内容 85 | * 改进 通用技能 - 成长,增加、分类、完善该部分内容。增加了,提问的智慧、小事心态、任务拆分、方法论这些内容 86 | * 改进 通用技能 - 完成的定义,增加条目7 87 | * 改进 通用技能 - 好书推荐,增加、分类、完善该部分内容。 88 | * 改进 专业技能,归类调整内容以及顺序 89 | * 改进 专业技能的借个章节内容完善,Python、前端、数据库、算法 90 | * 改进 按约定规范英文大小写、标题等级、列表符号 91 | * 改进 提供FreeMind版本的打包下载 92 | * 删除 专业技能,多余的内容 93 | 94 | 2.1 95 | ---- 96 | 2013-04-22 97 | 98 | * 公开 99 | * 用Sphinx维护该文档 100 | 101 | <=2.0 102 | ----- 103 | 2012-12-01创建,实际更早 104 | 105 | * 内部 106 | -------------------------------------------------------------------------------- /comm/index.rst: -------------------------------------------------------------------------------- 1 | 通用技能 2 | ======== 3 | 4 | 公司与个人 5 | ---------- 6 | 7 | * 公司是盈利性组织 8 | * 个人和公司必须双赢 9 | * 在认同公司理念且能够给公司创造足够价值的基础上,为个人发展而工作 10 | 11 | Who am I 12 | -------- 13 | 14 | 黑客是守正出奇且具备创造力的群体 15 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | 17 | 守正出奇 18 | """""""" 19 | 20 | * 这条正道/底线得坚守 21 | * 但如果太过正就迂腐了,为了搞定任务有时得出奇招 22 | 23 | 创造力 24 | """""" 25 | 26 | * 一个没有创造力的人是多么的可怜,对于团队来说也是一种耻辱 27 | * 本技能表的本质目的只有一个:引导你拥有足够的创造力 28 | 29 | 黑客也可以是一种思维方式 30 | ~~~~~~~~~~~~~~~~~~~~~~~~ 31 | 32 | 我们需要对得起名片上的那个头衔:工程师、研究员 33 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 34 | 35 | 牛人姿态 36 | ~~~~~~~~ 37 | 38 | * 即使现在不是牛人,也得具备这样的姿态 39 | * 没有一定扎实内功与远见的人很少有这样的姿态 40 | * 拥有不将就的做事风格,迟早是牛人 41 | 42 | 如何做事 43 | -------- 44 | 45 | 方法论 46 | ~~~~~~ 47 | 48 | * 完成一件事有好几条途径,优秀的人的途径最短 49 | * 任务拆分很容易得出做事的方法论 50 | * 好的「方法论」会让你具备更强的「创造力」! 51 | 52 | + 时刻问自己:「是否具备创造力?」 53 | 54 | 任务拆分 55 | ~~~~~~~~ 56 | 57 | 成长过程会经历:能力越大、责任越大、事情越多 58 | 59 | 60 | 思路 61 | ~~~~~~~~ 62 | 63 | * 拆分细化为多个点 64 | * 排好优先级 65 | 66 | 任务四象限,决定优先级 67 | 68 | * 紧急重要 69 | 70 | + 赶紧搞定 71 | 72 | * 重要不紧急 73 | 74 | + 时刻保持关注,以免沦为「紧急重要」 75 | 76 | * 紧急不重要 77 | 78 | + 少少益善,学会拒绝 79 | 80 | * 不紧急不重要 81 | 82 | + 靠自律 83 | 84 | SMART 原则 85 | ~~~~~~~~~~~ 86 | 87 | * S:任务是否明确 88 | 89 | + 不明确的任务搞起来就是浪费生命 90 | 91 | * M:任务是否可度量 92 | 93 | + 不可度量如何体现价值? 94 | 95 | * A:任务是否可搞定 96 | 97 | + 搞不定就不应该接,接就得有魄力搞定 98 | 99 | * R:任务的相关性如何 100 | 101 | + 决定了任务的价值,相关性越高越能体现价值,比如这个任务搞定了能让团队获得公司、客户等更大的认可 102 | 103 | * T:任务的时间 104 | 105 | + Timeline:任务时间轴,什么时间点需要搞定什么 106 | + Deadline:任务的最后期限,做评估时最好提前,因为总会有各种意外或拖延本性 107 | + Timeline 上一些很关键的时间点我们可以称为里程碑,搞定每个里程碑应该庆祝下 108 | 109 | 自己欠缺什么,立马发现 110 | ~~~~~~~~~~~~~~~~~~~~~~~~~ 111 | 112 | 是否需要寻求帮助,谁能帮你,自己单干? 113 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 114 | 115 | 团队 116 | ~~~~~~ 117 | 118 | 士气第一 119 | 120 | * 当你有团队时,分配与调度好任务很关键 121 | 122 | + 做得好是真并发 123 | + 做不好会死锁 124 | 125 | 沟通、反馈与责任 126 | ~~~~~~~~~~~~~~~~ 127 | 128 | * 一个无沟通能力的人,要么是天才,要么是不可爱的人,不过天才也就寥寥无几而已,你并不是 129 | * 反馈要及时 130 | 131 | + 避免出问题不反馈,影响进度 132 | + 方式 133 | 134 | - 正式的:邮件 135 | - 临时的:微信等即时通信 136 | - 着急的:给个电话 137 | 138 | * 工作有大小,责任心无大小 139 | * 周报的透明 140 | 141 | + 意义:大家互相了解工作与心得,有利于自己的判断与成长 142 | 143 | - 观察是一种很重要的技能 144 | - 不是单纯的给领导汇报工作 145 | 146 | + 周报需体现本周工作总结、下周工作计划、心得/问题/建议(我们叫唧唧歪歪) 147 | + 周报可以很好体现一个人的 148 | 149 | - 总结能力 150 | - 计划能力 151 | - 分享能力 152 | 153 | - 想象下:一个人从来没有心得/问题/建议的沉淀或反馈,这个人是一个相对封闭的人,在团队作战中很难达到默契 154 | - 当然,这种分享能力远不仅仅是在周报这种形式里 155 | 156 | 团队意识 157 | ~~~~~~~~ 158 | 159 | * 很多人都说自己具备足够好的团队意识,但是有些人却并不是这样 160 | 161 | + 举个小例子:一个 10 人团队约定早上 10 点开会,而你迟到了 10 分钟,对于团队来说你浪费了整个团队 100 分钟(10 人 * 10 分钟)的生命。有些人无羞愧之心要么是意识不到这点,要么这个团队的风气就是这样... 162 | 163 | * 团队意识是建立在互相信任的基础上 164 | * "尺有所短,寸有所长" 是一个优秀的团队必须要达成的共识 165 | * Leader 最关键,优秀的 Leader 一定会有个优秀团队 166 | 167 | + 兵熊熊一个 168 | + 将熊熊一窝 169 | 170 | * 如何拥有个优秀的团队是一个复杂的话题 171 | 172 | 成长 173 | ---- 174 | 175 | 新事物的敏感性 176 | ~~~~~~~~~~~~~~ 177 | 178 | * 保持好奇心 179 | * 不要局限在自己的圈子,适当跨界吸收灵感 180 | * 订阅国内外优秀博客/资源 181 | * 选择性参与一些必要的会议,听必要的主题,讨论必要的话题 182 | 183 | 关于知识 184 | ~~~~~~~~ 185 | 186 | * 好记性不如烂笔头,勤做笔记所带来的收益远超你想象 187 | * 尽快尽早的将自己的知识形成系统化认知,会达到事半功倍的效果 188 | * 对知识的渴望程度决定了前进动力的大小 189 | * 当知识很廉价地摆在你面前,你反而不会珍惜 190 | * 对知识保持敬畏之心 191 | 192 | 关于信息获取 193 | ~~~~~~~~~~~~~~ 194 | 195 | * 拓宽自己获取信息的渠道,但不要陷入低信噪比的泥潭 196 | * 信息筛选 197 | + 与你相关性如何? 198 | + 整体可信度多高? 199 | + 有效信息量多少? 200 | * 处理并重新组织为你自己的理解 201 | 202 | 不要让自己成为矫情/浮夸的人 203 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 204 | 205 | 和比你厉害的人在一起,和一流的人工作 206 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 207 | 208 | * 指点往往是精华 209 | * 杜绝笨蛋爆炸 210 | 211 | + 二流的人招进来的人不太可能是一流的 212 | + 久而久之一个团队就笨蛋爆炸了 213 | 214 | 思考 215 | ~~~~ 216 | 217 | * 批判性思考 218 | * 解构与系统化思考 219 | * 换位思考 220 | 221 | + 对于一个团队来说,这点太关键 222 | 223 | 提问的智慧 224 | ~~~~~~~~~~ 225 | 226 | * 遇到问题先独立思考,尝试独立解决,尽最大努力后再提问 227 | 228 | + 《你尽力了吗?》 https://paper.seebug.org/papers/scz/body/200004171952.txt 229 | 230 | * 提问时,礼貌很关键(对知识的敬畏),清晰表达很关键 231 | 232 | * 解决后,分享出来帮助更多需要帮助的人 233 | 234 | 235 | 小事心态 236 | ~~~~~~~~ 237 | 238 | * 越基础的事越关键,越需要细心 239 | * 不要一味盲目追求「高级感」,而忽视「小事」/「简单事」/「基础事」 240 | * 基础不牢、地动山摇 241 | * 小事做不好,别提大事 242 | 243 | 无论是个人还是团队的成长都需要不断沉淀知识,没有沉淀根基不稳 244 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 245 | 246 | 完成的定义 247 | ---------- 248 | 249 | 比如写个 POC 250 | ~~~~~~~~~~~~ 251 | 252 | 1. 搞懂了目标 Web 应用漏洞的原理 253 | 2. 熟练运用 Python 各相关模块与机制 254 | 3. 熟练了解了 HTTP 协议 255 | 256 | * HTTP 请求 257 | * HTTP 响应 258 | 259 | 4. 代码写得够规范,让人看起来就是爽 260 | 5. 程序经过足够的测试 261 | 262 | * 黑盒测试 263 | * 白盒测试 264 | 265 | 6. 及时反馈进度 266 | 267 | * 我遇到困难了 268 | * 我搞定了 269 | 270 | 7. 更新相关文档,沉淀 271 | 272 | 熟练的定义 273 | ---------- 274 | 275 | 比如熟练 SQL 注入 276 | ~~~~~~~~~~~~~~~~~ 277 | 278 | * SQL 语句这门“语言”能脱离文档顺手写出 279 | * 主流数据库的 SQL 特有函数、存储过程、机制我都了如指掌 280 | 281 | + MySQL 282 | + PostgreSQL 283 | + ... 284 | 285 | * 牛逼的工具我不仅用的顺其自然,源码还读过几遍,我能修改 286 | 287 | + pocsuite3 288 | + sqlmap 289 | + metasploit 290 | + nmap 291 | + ... 292 | 293 | * 我具备创造性,而不仅仅是跟在大牛身后 294 | 295 | + 研究出了几个不错的技巧 296 | + 发了几篇不错的 Paper 297 | + 对外会议/沙龙等进行了几次分享 298 | + 写出了自己的相关工具,爽 299 | 300 | * 我实战了 N 回,遇到了很多奇葩环境,我有足够的信心绕过 301 | * 以上这些之后,这才叫熟练!其他同理 302 | 303 | 好书推荐 304 | -------- 305 | 306 | 推荐理由 307 | ~~~~~~~~ 308 | 309 | * 打通任督二脉的书,怎能不看? 310 | 311 | + 但,尽信书不如无书 312 | 313 | * 任何科学研究最终必须至少到哲学层面,触碰到上帝的脚 314 | * 具体技术类书籍请见「专业技能」相关部分 315 | 316 | 鸡汤类 317 | ~~~~~~ 318 | 319 | UNIX 编程艺术 320 | """"""""""""" 321 | 322 | 极客的思维哲学 323 | 324 | * 使用简洁的接口拼合简单的部件 325 | * 清晰胜于机巧 326 | * 设计时考虑拼接组合 327 | * 策略同机制分离,接口同引擎分离 328 | * 设计要简洁,复杂度能低则低 329 | * 除非确无它法,不要编写庞大的程序 330 | * 设计要可见,以便审查和调试 331 | * 健壮源于透明与简洁 332 | * 把知识叠入数据以求逻辑质朴而健壮 333 | * 接口设计避免标新立异 334 | * 如果一个程序没什么好说的,就保持沉默 335 | * 出现异常时,马上退出并给出足量错误信息 336 | * 宁花机器一分,不花程序员一秒 337 | * 避免手工hack,尽量编写程序去生成程序 338 | * 雕琢前先得有原型,跑之前先学会走 339 | * 决不相信所谓“不二法门”的断言 340 | * 设计着眼未来,未来总比预想快 341 | 342 | 黑客与画家 343 | """""""""" 344 | 345 | 印象深刻:设计者的品味 346 | 347 | * 好设计是简单的设计 348 | 349 | + 抓住本质 350 | 351 | * 好设计是永不过时的设计 352 | 353 | + 如果解决方法是丑陋的,那就肯定还有更好的解决方法,只是还没有发现而已 354 | 355 | * 好设计是解决主要问题的设计 356 | * 好设计是启发性的设计 357 | * 好设计通常是有点趣味性的设计 358 | * 好设计是艰苦的设计 359 | * 好设计是看似容易的设计 360 | * 好设计是对称的设计 361 | * 好设计是模仿大自然的设计 362 | * 好设计是一种再设计 363 | * 好设计是能够复制的设计 364 | * 好设计往往是奇特的设计 365 | * 好设计是成批出现的 366 | * 好设计常常是大胆的设计 367 | 368 | 369 | 浪潮之巅 370 | """""""" 371 | 372 | 感受 IT 帝国的崛起与没落,我们现在站在又一个互联网浪潮之巅 373 | 374 | 代码2.0 - 网络空间中的法律 375 | """""""""""""""""""""""""""""" 376 | 377 | 网络不是法外之地 378 | 379 | 洁癖类 380 | ~~~~~~ 381 | 382 | * 重构 383 | * 代码整洁之道 384 | * 代码大全 2 385 | 386 | 敏捷类 387 | ~~~~~~ 388 | 389 | * Rework中文版 390 | 391 | + 37signals 团队的敏捷经验 392 | 393 | * 高效程序员的 45 个习惯 394 | 395 | 产品类 396 | ~~~~~~ 397 | 398 | * 人人都是产品经理 399 | * 结网 400 | 401 | 神书 402 | ~~~~ 403 | * 自私的基因 404 | * 失控 405 | 406 | 407 | ... 408 | ~~~ 409 | -------------------------------------------------------------------------------- /conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # RD_Checklist documentation build configuration file, created by 4 | # sphinx-quickstart on Tue Apr 23 19:54:45 2013. 5 | # 6 | # This file is execfile()d with the current directory set to its containing dir. 7 | # 8 | # Note that not all possible configuration values are present in this 9 | # autogenerated file. 10 | # 11 | # All configuration values have a default; values that are commented out 12 | # serve to show the default. 13 | 14 | # import sys, os 15 | 16 | # If extensions (or modules to document with autodoc) are in another directory, 17 | # add these directories to sys.path here. If the directory is relative to the 18 | # documentation root, use os.path.abspath to make it absolute, like shown here. 19 | # sys.path.insert(0, os.path.abspath('.')) 20 | 21 | # -- General configuration ----------------------------------------------------- 22 | 23 | # If your documentation needs a minimal Sphinx version, state it here. 24 | # needs_sphinx = '1.0' 25 | 26 | # Add any Sphinx extension module names here, as strings. They can be extensions 27 | # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. 28 | extensions = [] 29 | 30 | # Add any paths that contain templates here, relative to this directory. 31 | templates_path = ['_templates'] 32 | 33 | # The suffix of source filenames. 34 | source_suffix = '.rst' 35 | 36 | # The encoding of source files. 37 | # source_encoding = 'utf-8-sig' 38 | 39 | # The master toctree document. 40 | master_doc = 'index' 41 | 42 | # General information about the project. 43 | project = u'RD_Checklist' 44 | copyright = u'2024, Knownsec 404 Team' 45 | 46 | # The version info for the project you're documenting, acts as replacement for 47 | # |version| and |release|, also used in various other places throughout the 48 | # built documents. 49 | # 50 | # The short X.Y version. 51 | version = 'V4.0' 52 | # The full version, including alpha/beta/rc tags. 53 | release = 'V4.0' 54 | 55 | # The language for content autogenerated by Sphinx. Refer to documentation 56 | # for a list of supported languages. 57 | # language = None 58 | 59 | # There are two options for replacing |today|: either, you set today to some 60 | # non-false value, then it is used: 61 | # today = '' 62 | # Else, today_fmt is used as the format for a strftime call. 63 | # today_fmt = '%B %d, %Y' 64 | 65 | # List of patterns, relative to source directory, that match files and 66 | # directories to ignore when looking for source files. 67 | exclude_patterns = ['_build'] 68 | 69 | # The reST default role (used for this markup: `text`) to use for all documents. 70 | # default_role = None 71 | 72 | # If true, '()' will be appended to :func: etc. cross-reference text. 73 | # add_function_parentheses = True 74 | 75 | # If true, the current module name will be prepended to all description 76 | # unit titles (such as .. function::). 77 | # add_module_names = True 78 | 79 | # If true, sectionauthor and moduleauthor directives will be shown in the 80 | # output. They are ignored by default. 81 | # show_authors = False 82 | 83 | # The name of the Pygments (syntax highlighting) style to use. 84 | pygments_style = 'sphinx' 85 | 86 | # A list of ignored prefixes for module index sorting. 87 | # modindex_common_prefix = [] 88 | 89 | 90 | # -- Options for HTML output --------------------------------------------------- 91 | #html_style = 'tracsphinx.css' 92 | 93 | # The theme to use for HTML and HTML Help pages. See the documentation for 94 | # a list of builtin themes. 95 | #html_theme = 'sphinxdoc' 96 | html_theme = 'pydata_sphinx_theme' 97 | 98 | # Theme options are theme-specific and customize the look and feel of a theme 99 | # further. For a list of options available for each theme, see the 100 | # documentation. 101 | html_theme_options = { 102 | "logo": { 103 | "image_light": "_static/404logo_light.png", 104 | "image_dark": "_static/404logo_dark.png", 105 | } 106 | } 107 | 108 | # Add any paths that contain custom themes here, relative to this directory. 109 | # html_theme_path = [] 110 | 111 | # The name for this set of Sphinx documents. If None, it defaults to 112 | # " v documentation". 113 | # html_title = None 114 | 115 | # A shorter title for the navigation bar. Default is the same as html_title. 116 | # html_short_title = None 117 | 118 | # The name of an image file (relative to this directory) to place at the top 119 | # of the sidebar. 120 | # html_logo = None 121 | 122 | # The name of an image file (within the static path) to use as favicon of the 123 | # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 124 | # pixels large. 125 | # html_favicon = None 126 | 127 | # Add any paths that contain custom static files (such as style sheets) here, 128 | # relative to this directory. They are copied after the builtin static files, 129 | # so a file named "default.css" will overwrite the builtin "default.css". 130 | html_static_path = ['_static'] 131 | 132 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, 133 | # using the given strftime format. 134 | # html_last_updated_fmt = '%b %d, %Y' 135 | 136 | # If true, SmartyPants will be used to convert quotes and dashes to 137 | # typographically correct entities. 138 | html_use_smartypants = False 139 | 140 | # Custom sidebar templates, maps document names to template names. 141 | # html_sidebars = {} 142 | html_sidebars = { 143 | "**": [] 144 | } 145 | 146 | # Additional templates that should be rendered to pages, maps page names to 147 | # template names. 148 | # html_additional_pages = {} 149 | 150 | # If false, no module index is generated. 151 | # html_domain_indices = True 152 | 153 | # If false, no index is generated. 154 | # html_use_index = True 155 | 156 | # If true, the index is split into individual pages for each letter. 157 | # html_split_index = False 158 | 159 | # If true, links to the reST sources are added to the pages. 160 | # html_show_sourcelink = True 161 | 162 | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. 163 | # html_show_sphinx = True 164 | 165 | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. 166 | # html_show_copyright = True 167 | 168 | # If true, an OpenSearch description file will be output, and all pages will 169 | # contain a tag referring to it. The value of this option must be the 170 | # base URL from which the finished HTML is served. 171 | # html_use_opensearch = '' 172 | 173 | # This is the file name suffix for HTML files (e.g. ".xhtml"). 174 | # html_file_suffix = None 175 | 176 | # Output file base name for HTML help builder. 177 | htmlhelp_basename = 'RD_Checklistdoc' 178 | 179 | 180 | # -- Options for LaTeX output -------------------------------------------------- 181 | 182 | latex_elements = { 183 | # The paper size ('letterpaper' or 'a4paper'). 184 | # 'papersize': 'letterpaper', 185 | # The font size ('10pt', '11pt' or '12pt'). 186 | # 'pointsize': '10pt', 187 | # Additional stuff for the LaTeX preamble. 188 | # 'preamble': '', 189 | } 190 | 191 | # Grouping the document tree into LaTeX files. List of tuples 192 | # (source start file, target name, title, author, documentclass [howto/manual]). 193 | latex_documents = [ 194 | ( 195 | 'index', 196 | 'RD_Checklist.tex', 197 | u'RD\\_Checklist Documentation', 198 | u'Knownsec Team', 199 | 'manual', 200 | ), 201 | ] 202 | 203 | # The name of an image file (relative to this directory) to place at the top of 204 | # the title page. 205 | # latex_logo = None 206 | 207 | # For "manual" documents, if this is true, then toplevel headings are parts, 208 | # not chapters. 209 | # latex_use_parts = False 210 | 211 | # If true, show page references after internal links. 212 | # latex_show_pagerefs = False 213 | 214 | # If true, show URL addresses after external links. 215 | # latex_show_urls = False 216 | 217 | # Documents to append as an appendix to all manuals. 218 | # latex_appendices = [] 219 | 220 | # If false, no module index is generated. 221 | # latex_domain_indices = True 222 | 223 | 224 | # -- Options for manual page output -------------------------------------------- 225 | 226 | # One entry per manual page. List of tuples 227 | # (source start file, name, description, authors, manual section). 228 | man_pages = [ 229 | ('index', 'rd_checklist', u'RD_Checklist Documentation', [u'Knownsec Team'], 1) 230 | ] 231 | 232 | # If true, show URL addresses after external links. 233 | # man_show_urls = False 234 | 235 | 236 | # -- Options for Texinfo output ------------------------------------------------ 237 | 238 | # Grouping the document tree into Texinfo files. List of tuples 239 | # (source start file, target name, title, author, 240 | # dir menu entry, description, category) 241 | texinfo_documents = [ 242 | ( 243 | 'index', 244 | 'RD_Checklist', 245 | u'RD_Checklist Documentation', 246 | u'Knownsec Team', 247 | 'RD_Checklist', 248 | 'One line description of project.', 249 | 'Miscellaneous', 250 | ), 251 | ] 252 | 253 | # Documents to append as an appendix to all manuals. 254 | # texinfo_appendices = [] 255 | 256 | # If false, no module index is generated. 257 | # texinfo_domain_indices = True 258 | 259 | # How to display URL addresses: 'footnote', 'no', or 'inline'. 260 | # texinfo_show_urls = 'footnote' 261 | -------------------------------------------------------------------------------- /end/index.rst: -------------------------------------------------------------------------------- 1 | 结尾 2 | ==== 3 | 4 | * 本技能表会持续不断更新 5 | * 如果有相关好资源/建议可以联系:404-team@knownsec.com 6 | * 如果本技能表引起你的强烈共鸣,想加入我们,可以联系:404-team@knownsec.com 7 | * 邮件联系我们,邮件标题务必包含「技能表」三个字,感谢 8 | 9 | * **TO BE A HACKER :)** 10 | 11 | 贡献 12 | ==== 13 | 14 | * Knownsec 404 Team 15 | 16 | 致谢 17 | ==== 18 | 19 | * 余弦 20 | * 行之 21 | 22 | >_ 23 | -------------------------------------------------------------------------------- /index.rst: -------------------------------------------------------------------------------- 1 | 知道创宇研发技能表 |version| 2 | ============================== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | intro/index 8 | comm/index 9 | special/index 10 | resource/index 11 | end/index 12 | changelog/index 13 | 14 | -------------------------------------------------------------------------------- /intro/index.rst: -------------------------------------------------------------------------------- 1 | 说明 2 | ==== 3 | 4 | * 请勿用于非法用途,请遵守网络安全法 5 | 6 | + http://www.cac.gov.cn/2016-11/07/c_1119867116.htm 7 | 8 | * 关于知道创宇 9 | 10 | + 知行合一 | 守正出奇 11 | + 知道创宇是一家黑客文化浓厚的安全公司,愿景是让互联网更好更安全 12 | 13 | * 本技能表为知道创宇安全研发工程师的技能树集合,是的,很庞大 14 | 15 | + 聪明的人,会根据每个 Tip 自驱动扩展 16 | + 不聪明的人,坐等别人手把手,不仅不适合知道创宇,也不适合任何有极客精神的公司 17 | 18 | -------------------------------------------------------------------------------- /resource/index.rst: -------------------------------------------------------------------------------- 1 | 优质资源 2 | ======== 3 | 4 | 书 5 | -- 6 | 7 | * 多关注电子工业/图灵/机械工业/人民邮电等出版社,他们有专业团队来保障每年输出优质书籍 8 | * 微信读书也不贵,买一个吧 9 | * 自己需要掌握鉴别好书的能力 10 | 11 | 站点 12 | ---- 13 | 14 | * Seebug Paper:https://paper.seebug.org 15 | * Hacker News:https://hackernews.cc 16 | * 先知社区:https://xz.aliyun.com/ 17 | * FreeBuf:http://www.freebuf.com/ 18 | * InfoQ:http://www.infoq.com/cn 19 | * Stack Overflow:http://stackoverflow.com/ 20 | * GitHub:https://github.com/explore 21 | * 深蓝阅读:http://bluereader.org/ 22 | 23 | RSS 订阅 24 | -------- 25 | 26 | * 漏洞相关 27 | 28 | + https://www.seebug.org/rss.xml 29 | + https://www.exploit-db.com/rss.xml 30 | + https://rss.packetstormsecurity.com 31 | + https://www.tenable.com/security/research/feed 32 | + http://0day.today/rss 33 | + http://seclists.org/rss/fulldisclosure.rss 34 | + https://www.zerodayinitiative.com/rss/published/ 35 | 36 | * RSS 阅读器 37 | 38 | + https://feedly.com 39 | 40 | 安全平台 41 | -------- 42 | 43 | * 在线学习平台 44 | 45 | + https://pentesterlab.com 46 | + Root Me:https://www.root-me.org 47 | + CTFHub:https://www.ctfhub.com 48 | + vulhub:https://github.com/vulhub/vulhub 49 | 50 | * PoC 提交与学习 51 | 52 | + Seebug: https://www.seebug.org 53 | + Exploit-DB:https://www.exploit-db.com 54 | 55 | -------------------------------------------------------------------------------- /special/common_sec.rst: -------------------------------------------------------------------------------- 1 | .. _通用安全能力/概念: 2 | 3 | 通用安全能力/概念 4 | ========================= 5 | 6 | 安全研究员的基本功,决定了研究能力的下限,这些即可以是实用于其他领域的工具方法,又可以作为单独的研究方向。 7 | 8 | 密码学 9 | =========== 10 | 11 | * 对称加密 12 | 13 | - AES 14 | - DES 15 | - 3DES 16 | - SM1 / SM4 17 | - ... 18 | 19 | * 非对称加密 20 | 21 | - RSA 22 | - ECC 23 | - SM2 24 | - ... 25 | 26 | * Hash算法 27 | 28 | - MD5 29 | - SHA1 30 | - SHA256 31 | - SM3 32 | - NTLM hash 33 | - ... 34 | 35 | * 混合加密方案/应用 36 | 37 | - SSL/TLS 38 | - SSH 39 | - IPsec 40 | - ... 41 | 42 | * 密码爆破 43 | 44 | 社会工程学 45 | =============== 46 | 47 | * 信息获取 48 | 49 | + 社交工程侦查 50 | + 垃圾搜寻 51 | + 个人疏忽泄露 52 | + ... 53 | 54 | * 行为诱导 55 | 56 | + 钓鱼,各种各样的钓鱼 57 | + 伪装利用同情心、亲和力或权威 58 | + 群体压力 59 | + 尾随捎带 60 | 61 | 大家在网络空间也要记得保护好自己 62 | 63 | 网络发现和管理 64 | ================== 65 | 66 | * 公网设备发现 67 | 68 | - 网络空间测绘引擎 ZoomEye 69 | 70 | * 内网拓扑分析 71 | 72 | * 梯子/内网穿透 73 | 74 | - 机场 75 | - v2ray 76 | - wireguard 77 | - frp转发 78 | - ssh隧道 79 | - 还有很多隧道用法 80 | - ... 81 | 82 | 如何给浏览器、shell、docker等环境配置代理就不多赘述了 83 | 84 | 抓包和流量分析 85 | =================== 86 | 87 | curl 88 | ---------- 89 | 90 | * 加-v参数后理解HTTP协议最佳工具之一,不止于此,还支持很多其它协议。。。 91 | * 很不错的教程: https://www.ruanyifeng.com/blog/2019/09/curl-reference.html 92 | * 更多的技巧,man一下吧 93 | 94 | BurpSuite 95 | --------------- 96 | 97 | * 抓包与各种调试 98 | * 拦截修改 99 | * 重放功能 100 | * 编码解码/POST 提交 101 | * kali默认自带社区版,够你用了 102 | 103 | 104 | Mitmproxy 105 | -------------- 106 | 107 | * 中间人代理工具,可以用来拦截、修改、保存 HTTP/HTTPS 请求 108 | 109 | 110 | Wireshark/tcpdump 111 | --------------------- 112 | 113 | * 各种强大的过滤器语法 114 | * 各种硬件接口与协议的支持 115 | * 可以配合 curl 进行协议分析学习 116 | 117 | 虚拟化与隔离 118 | ================= 119 | 这里不讨论广义上的虚拟化技术,只是在安全研究中经常会接触到的虚拟化概念 120 | 121 | 沙箱 122 | ------- 123 | 124 | 其核心目的是提供隔离机制,使程序可以在一个受限的环境中运行,以减少潜在的安全风险。 125 | 126 | 所以这是一个可大可小的概念,它可以是浏览器中的脚本解析器,也可以是智能手机为每个app提供的运行环境, 127 | 还可以是测试来源不明的程序的虚拟机,甚至是一台断了网的电脑,都可以被称作沙箱。 128 | 129 | 容器 130 | -------- 131 | 132 | 容器共享宿主机的操作系统内核,但每个容器之间相互隔离。 133 | 134 | 可以理解为操作系统虚拟化,容器将应用及其依赖环境打包在一起,创建一个可以独立运行的“轻量级”虚拟系统。 135 | 通常使用 Linux 内核的命名空间和控制组等特性来实现资源隔离,因此容器的安全性依赖于宿主机的内核与具体配置。 136 | 137 | 虚拟机 138 | ---------- 139 | 140 | 软件模拟一个完整的硬件环境,每个虚拟机都有自己的操作系统。 141 | 142 | 可以理解为硬件虚拟化,软件模拟的硬件环境,可以与宿主机的硬件架构不同,因此兼容性和隔离性都更好。 143 | 但是虚拟机的资源消耗大,每次运行都需要加载整个操作系统,如果硬件架构不同,造成的开销会更大。 144 | 145 | 逆向工程 146 | ============ 147 | 148 | 静态分析 149 | ------------ 150 | 不执行程序代码,通过查看程序反编译的汇编代码、字节码或高级语言代码来判断程序的功能和结构 151 | 152 | * IDA Pro 的基本使用 153 | 154 | + 修改变量类型 155 | + 搜索定位 156 | + 定义结构体 157 | + Patch 158 | + 编写idapython插件 159 | + ... 160 | 161 | * 其他静态分析工具 162 | 163 | + Ghidra 164 | + Ninja 165 | + Radare2 166 | + objdump 167 | + jd-gui (java) 168 | + dnspy (.Net) 169 | + jadx (android dex) 170 | + ... 171 | 172 | 动态分析 173 | ------------ 174 | 实际运行程序,通过调试或Hook等方式,来理解目标程序的工作机制 175 | 176 | * 熟练掌握其中一个或多个调试工具 177 | 178 | + IDA Pro 179 | + WinDbg 180 | + x64dbg 181 | + GDB 182 | 183 | - GDB 的基本使用 184 | - .gdbinit 的基本使用,比如自定义一个GDB命令 185 | - 使用 python 开发 GDB 插件 186 | - GDB 的插件:Pwndbg / gef / peda / ... 187 | 188 | 恶意文件识别(与 免杀) 189 | ============================ 190 | 191 | * 恶意文件识别 192 | 193 | + 特征匹配 194 | + 行为分析 195 | 196 | * 免杀手段 197 | 198 | + 加壳/加密 + 自定义loader 199 | + 运行环境检测 200 | + 隐蔽通信 201 | + 寄生合法软件 202 | + ... 203 | 204 | * 加壳技术的发展 205 | 206 | 1. 源码混淆、可执行文件压缩加密,运行前解密; 207 | 2. 内存中解密重组文件并加载执行代码段,无文件落地; 208 | 3. 根据可执行文件的结构,仅解密函数索引,按需解密并加载执行代码段; 209 | 4. 指令转义,通过自定义的解释器执行等效代码,也就是虚拟机壳; 210 | 211 | 漏洞分析/挖掘 212 | ================ 213 | 214 | 漏洞复现 215 | -------------------- 216 | 217 | * 环境搭建 218 | 219 | - 对应版本 220 | - 对应功能组件与设置 221 | 222 | * 触发漏洞 223 | * 分析漏洞成因 224 | * 开发漏洞利用 225 | 226 | 补丁对比 227 | ------------------- 228 | 229 | * diff工具 230 | * bindiff 231 | * Beyond Compare 232 | * ... 233 | 234 | 模糊测试 235 | -------------------- 236 | 237 | 模糊测试的目标类型 238 | """""""""""""""""""" 239 | 240 | * 文件格式 241 | * 网络协议 242 | * 脚本解析 243 | * 系统调用 244 | * ... 245 | 246 | 覆盖率导向的fuzz流程 247 | """""""""""""""""""""" 248 | 249 | * 收集语料库素材 250 | * 代码插桩 251 | 252 | + 源代码插桩 253 | 254 | - gcc 255 | - clang 256 | 257 | + 静态二进制插桩 258 | 259 | - dyninst 260 | 261 | + 动态运行时插桩 262 | 263 | - aflpin 264 | - Qemu 模拟 265 | - DynamoRIO 266 | 267 | * 变异算法 268 | 269 | + 随机变异 270 | + 语法/模版指导变异 271 | + 协议/API调用序列变异 272 | + ... 273 | 274 | * 异常捕获 275 | 276 | + 异常退出 277 | + ASAN检测内存异常 278 | + ... 279 | 280 | * 覆盖率检测 281 | 282 | + afl-cov 283 | + gcov, lcov 284 | 285 | 主流Fuzz框架 286 | """""""""""""""" 287 | 288 | * AFL++ 289 | * libfuzzer 290 | * honggfuzz 291 | * boofuzz 292 | * syzkaller 293 | * fuzzilli 294 | * ... 295 | 296 | 代码审计 297 | ------------- 298 | 在对漏洞类型的理解上,结合源码或逆向工程对软件进行漏洞挖掘 299 | 300 | 代码审计思路 301 | """""""""""""""""""""""""" 302 | 303 | * 理解 source to sink 304 | * 从数据输入/生成处开始,跟踪数据传递过程是否有逻辑错误,判断是否会流入敏感函数; 305 | * 从程序中的敏感函数开始,逆向倒推数据来源是否可控,是否经过充分检查与过滤; 306 | 307 | 自动化静态代码审计框架 308 | """""""""""""""""""""""""" 309 | 310 | * CodeQL 311 | * Tai-e 312 | * Fortify 313 | * FindBugs 314 | * Cppcheck 315 | * ... 316 | 317 | >_ -------------------------------------------------------------------------------- /special/engineering.rst: -------------------------------------------------------------------------------- 1 | .. _工程化能力: 2 | 3 | 工程化能力 4 | ~~~~~~~~~~~~~~ 5 | 6 | 研发能力 7 | ~~~~~~~~~~ 8 | 9 | 瀑布模型 10 | """""""" 11 | 12 | * 需求 -> 需求分析 -> 设计 -> 开发 -> 测试 -> 上线 -> 运维/运营 13 | 14 | 需求分析能力 15 | """""""""""" 16 | 17 | * 给你一个需求,如何给出一个优美的执行思路——方法论 18 | * 这个能力非常非常非常的关键 19 | 20 | 调试能力 21 | """""""" 22 | 23 | * 只要定位出,就没有解决不了的 Bugs 24 | * 肉眼看到的都是假象 25 | 26 | + 一定要专业的工具与经验配合 27 | 28 | * Bugs 在哪出现,最终就在哪进行真实模拟调试 29 | * 缩小范围 30 | 31 | + 构建自己的测试样例 32 | 33 | - 排除网络复杂未知情况 34 | 35 | + 关联模块一个个排除 36 | + Python 单步调试 37 | 38 | - import pdb; pdb.set_trace() 39 | - 在需要单步调试的地方加上面这句,运行程序后中断在此,然后 h 查看指令进行一步步细细调试 40 | 41 | + 粗暴调试:print 42 | 43 | 敏捷思想 44 | """""""" 45 | 46 | * 快速迭代 47 | * 任务拆细 48 | * v1 原则:定义好 v1 的目标,快速完成 v1 为优先 49 | * 习惯 WiKi 记录,利于沉淀与分享 50 | 51 | 编码环境 52 | ~~~~~~~~~~ 53 | * tmux/screen 54 | * Vim 55 | * Markdown 56 | * zsh + oh-my-zsh 57 | * fish 也值得一试 58 | * Python3 59 | + IPython 60 | + pip 61 | + venv 62 | + Django 63 | + 其它Web框架 64 | + web.py 65 | + Flask 66 | + Tornado 67 | 68 | * Golang 69 | + [Gin](https://github.com/gin-gonic/gin) 70 | + [Beego](https://github.com/astaxie/beego) 71 | + gorm(ORM) 72 | 73 | * Node.js 74 | * Ubuntu/Debian/Fedora/Kali 75 | * 版本控制 76 | + Git 77 | + GitLab 78 | * Nginx + uWSGI 79 | * 让你的电脑默认操作系统就是 Mac/Linux... 80 | 81 | 前端 82 | ~~~~ 83 | 84 | 书 85 | """" 86 | 87 | * 《JavaScript DOM 编程艺术》 88 | 89 | 了解 DOM 90 | """""""" 91 | 92 | * 这同样是搞好前端安全的必要基础 93 | 94 | 库 95 | """" 96 | 97 | * jQuery 98 | 99 | * 优秀的插件应该体验一遍,并做些尝试 100 | * 官方文档得过一遍 101 | 102 | * D3.js 103 | * ECharts 104 | 105 | + 来自百度 106 | 107 | * Google API 108 | * ZoomEye Map 组件 109 | 110 | + ZoomEye 团队自己基于开源的打造 111 | 112 | * Vue.js 113 | 114 | + 国内开源的渐进式 JavaScript 框架 115 | 116 | * React 117 | 118 | + Facebook 出品的前端渲染框架 119 | 120 | + Antd 蚂蚁集体开源的前端组件库 121 | 122 | * Bootstrap 123 | 124 | + 应该使用一遍 125 | 126 | 爬虫进阶 127 | ~~~~~~~~ 128 | 129 | * 代理池 130 | 131 | + 爬虫「稳定」需要 132 | 133 | * 网络请求 134 | 135 | + wget/curl 136 | + urllib3/httplib2/requests 137 | + Scrapy 138 | 139 | * 验证码破解 140 | 141 | + pytesser 142 | 143 | 调度 144 | ~~~~ 145 | 146 | * crontab 是最原生的定时调度 147 | * 基于 Redis 实现的分布式调度 148 | * 基于 RPyC 实现的分布式调度 149 | * Celery/Gearman 等调度框架 150 | 151 | 并发 152 | ~~~~ 153 | 154 | * 线程池 155 | 156 | + 进程内优美的并发方案 157 | 158 | * 协程 159 | 160 | + 进程内另一种优美的并发方案 161 | + gevent 162 | 163 | * 多进程 164 | 165 | + os.fork 166 | + multiprocessing 167 | 168 | 算法 169 | """" 170 | 171 | * 快排 172 | * 二分 173 | * 分词 174 | * 贝叶斯 175 | * 神经元 176 | * 遗传算法 177 | * 聚类/分类 178 | * ... 179 | 180 | 正则表达式 181 | """""""""""""" 182 | * 调试工具 183 | 184 | + Kodos 185 | + RegexBuddy 186 | 187 | - 支持多种语言 188 | - 支持调试优化 189 | 190 | * http://www.regexper.com/ 191 | 192 | + 正则图解 193 | 194 | * https://regex101.com 195 | 196 | + regex101: build, test, and debug regex 197 | 198 | * 正则表达式30分钟入门教程:http://deerchao.net/tutorials/regex/regex.htm 199 | * Python正则表达式操作指南:http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97 200 | * 《精通正则表达式》 201 | 202 | 数据结构 203 | ~~~~~~~~ 204 | 205 | * JSON 206 | * cPickle 207 | * protobuf 208 | 209 | 数据库 210 | ~~~~~~ 211 | * Postgresql 212 | * MySQL 213 | * MongoDB 214 | * SQLite 215 | * Redis 216 | * ElasticSearch 217 | 218 | 大数据处理 219 | ~~~~~~~~~~ 220 | 221 | * Hive 222 | * Spark 223 | * ELK 224 | 225 | + ElasticSearch 226 | + Logstash 227 | + Kibana 228 | 229 | DevOps 230 | ~~~~~~ 231 | 232 | * SSH 证书 233 | * Fabric 234 | * SaltStack 235 | * Puppet 236 | * pssh/dsh 237 | * 运维进阶 238 | 239 | + 运维工程师必须掌握的基础技能有哪些? 240 | + http://www.zhihu.com/question/23665108/answer/25299881 241 | 242 | 调试 243 | ~~~~ 244 | 245 | * pdb 246 | * gdb 247 | * windbg 248 | * logging 249 | * Sentry 250 | * strace/ltrace 251 | * lsof 252 | * 性能 253 | 254 | + Python 内 255 | 256 | - timeit 257 | - cProfile 258 | - Python性能分析指南:http://www.oschina.net/translate/python-performance-analysis 259 | 260 | + Python 外 261 | 262 | - top/htop/free/iostat/vmstat/ifconfig/iftop... 263 | 264 | 持续集成 265 | ~~~~~~~~ 266 | 267 | * 自测试 268 | 269 | + nose 270 | 271 | * Jenkins 272 | 273 | 274 | 协作 275 | ~~~~ 276 | 277 | * 立会 278 | * 微信 279 | * Slack 280 | * 类似 Trello 的在线协同平台 281 | 282 | AI 应用 283 | ~~~~~~~~~~ 284 | 285 | * 让 AI 带你入门新领域 286 | 287 | * 为 AI 添加新数据 288 | 289 | - RAG 290 | - Embeddings 291 | - 原始模型微调 Fine-tuning 292 | - ... 293 | 294 | * 为 AI 添加新能力 295 | 296 | - 在线数据获取 297 | - 方法调用 function calling 298 | - 代码执行环境 code interpreter 299 | - ... 300 | 301 | * 让 AI 参与自动化 302 | 303 | - 数据分级分类 304 | - 关键信息提取 305 | - 样本数据生成 306 | - ... 307 | 308 | * 注意数据安全 309 | 310 | 设计思想 311 | ~~~~~~~~~~ 312 | 313 | * 人人都是架构师:具备架构思想是一件多酷的事 314 | * 实战出真知 315 | * 如何设计 316 | 317 | + 松耦合、紧内聚 318 | + 单元与单元属性 319 | + 生产者与消费者 320 | + 结构 321 | 322 | - 队列 323 | - LRU 324 | 325 | + 分布式 326 | 327 | - 存储 328 | - 计算 329 | 330 | + 资源考虑 331 | 332 | - CPU 333 | - 内存 334 | - 带宽 335 | 336 | + 粗暴美学/暴力美学 337 | 338 | - 大数据,先考虑 run it,然后才能知道规律在哪 339 | - “run it 优先”能快速打通整体,洞察问题 340 | - “run it 优先”能摆脱细节(繁枝末节)的束缚 341 | - “run it 优先”能快速迭代出伟大的 v1 342 | 343 | + 一个字总结 344 | 345 | - 美 346 | -------------------------------------------------------------------------------- /special/index.rst: -------------------------------------------------------------------------------- 1 | 专业技能 2 | ======== 3 | 4 | 原则 5 | ---- 6 | * 经典原理性书籍为第一原则 7 | * 至少完整看完与练习好如下其中一本 8 | 9 | + 《深入理解计算机系统》 10 | 11 | + 《UNIX环境高级编程》 12 | 13 | * "Don't repeat yourself" (DRY) 14 | 15 | + 在规避过渡优化的前提下,重复2遍以上的操作就要提前考虑优化 16 | 17 | * 不是必须项,但是是技术路上的助推器 18 | 19 | + 有一个稳定的翻墙渠道,并能使用英文进行快速精准检索技术问题,为什么不用中文?懂的都懂... 20 | 21 | + 使用AI作为辅助工具(ChatGPT/Copilot/Ollama...) 提示:尽信书,不如无书 22 | 23 | 基础必备 24 | -------- 25 | 26 | 基本环境 27 | ~~~~~~~~ 28 | 29 | 安装一个Linux发行版 30 | """"""""""""""""""" 31 | 32 | * 推荐安装Kali Linux:https://www.kali.org 33 | 34 | * Ubuntu/Debian/Fedora 也挺不错的 35 | 36 | * 《鸟哥的Linux私房菜 基础篇》值得通读并实操 37 | 38 | Shell用起来 39 | """"""""""" 40 | * 可以随着教程粗略学习一遍: https://github.com/52fhy/shell-book 41 | 42 | * 推荐扩展了解的几个Shell: zsh/fish/tcsh 43 | 44 | * man man or RTFM 45 | 46 | 熟练 Vim 47 | """"""""" 48 | 49 | * 实战至少 3 回合:http://coolshell.cn/articles/5426.html 50 | 51 | * 熟练 Vim 后搜索:[ zsh | bash | fish | firefox | vscode | idea | ... ] vim keybindings,会有惊喜 52 | 53 | 54 | 编码能力 55 | ~~~~~~~~~~ 56 | 上手 Python 57 | """"""""""""""""""" 58 | * 优点:学习成本很低,能够快速实现demo,而且大数据,机器学习也有一席之地 59 | * 官方手册 60 | 61 | + 至少过一遍,这都没过一遍,视野会局限 62 | 63 | + 行之说:「我没看过 Python 的书,却熟读官方手册……」 64 | 65 | * https://www.python.org/dev/peps/pep-0008/ 66 | * http://learnpythonthehardway.org/book/ 67 | 68 | 试试 Golang? 69 | """"""""""""""" 70 | * 优点:学习成本低,效率高,可跨平台交叉编译二进制静态文件 71 | * 官方手册 72 | * https://golang.google.cn/doc/effective_go 73 | * 《The Go Programming Language》 74 | 75 | 快速上手一门语言的方法论 76 | """""""""""""""""""""""" 77 | * 进程,线程,锁,并发,并行这些概念清晰理解 78 | 79 | * 编程语言的本质:数据结构 + 程序控制流 + 数据与程序的相互转化 80 | 81 | * 程序控制流:1. 顺序 2. 分支 3. 循环 82 | 83 | * 编程语言常见的数据类型/结构: 84 | 85 | + 基本数据类型:整数、浮点数、字符、布尔值 86 | 87 | + 引用数据类型:数组、结构体、类 88 | 89 | + 复合数据类型:字符串、集合、映射(字典) 90 | 91 | * 然后还有什么?文件I/O、网络通信之类的接口调用一下 92 | 93 | * 先用起来,作用域、生命周期 这些踩踩坑就会理解 94 | 95 | 文档能力 96 | ~~~~~~~~~~~~~~~~~~~~ 97 | 98 | * Word 文档编写,看去要专业,尤其对外的 99 | * Excel 里面大量的统计、图表功能,需要善于使用 100 | * PPT 演讲、培训等必备,如何做好 PPT?百度一下... 101 | * 以上所有功能,统统可以安装国产软件WPS完成 102 | * Markdown 非常适合做日常研究记录,还可以转换为其他格式 103 | * 进一步 104 | 105 | + yEd 106 | 107 | + Visio 108 | 109 | + Freemind 110 | 111 | + Sphinx 112 | 113 | - 本技能表就是这个制作 114 | 115 | + Xmind 116 | 117 | 基础运维实践 118 | ------------- 119 | 120 | * 家庭软路由或者树莓派折腾一下 121 | + 从上帝视角去看家里网络的流量数据(suricata,snort) 122 | + 查看或者禁用某个内网设备的流量(iptables) 123 | + 配置一个公网能够接入的 VPN ,搭建一个技术博客 124 | + 在安全的前提下,映射一个内网的 SSH 端口至互联网, 直观感受一下互联网的暴力破解和攻击力度 125 | 126 | * pve/kvm/virtualbox/vmware/docker 127 | + 大量的操作系统、开发环境、漏洞环境可以随时搭建 128 | + 借助AI快速上手诸如:FreeBSD,OpenBSD,Solaris 等等系统 129 | + 根据业务需求组建一个独立的网络环境,可进行测试、开发、漏洞验证 130 | 131 | * openWRT/Arduino/Home Assistant 132 | + 海量的家用路由器,摄像头,以及IoT设备的基础系统 133 | + 常见IoT设备的操作管理,焊接,代码编译刷写以及传感数据的获取 134 | + 家用智能设备的单独管控 135 | 136 | * 在上述几个条件的基础上,构建自己的私有云环境 137 | + NAS: 诸多数据的存储池和云盘服务 138 | + Nginx+webdav+Joplin: 私人的笔记服务 139 | + BitWarden:私人的密码存储服务 140 | 141 | 安全运维能力 142 | ------------------------ 143 | 144 | .. 145 | .. toctree:: 146 | :maxdepth: 2 147 | 148 | ./maintain 149 | 150 | * 资产测绘 151 | * 已知漏洞扫描 152 | * 基线检查 (安全策略与合规性检查) 153 | * 入侵检测与监控 154 | * 后门排查 155 | * 攻击溯源 156 | * 文件取证 157 | * 威胁情报 158 | 159 | 160 | :ref:`通用安全能力/概念` 161 | ------------------------ 162 | 163 | .. toctree:: 164 | :maxdepth: 2 165 | :hidden: 166 | 167 | ./common_sec 168 | 169 | * 密码学 170 | * 社会工程学 171 | * 网络发现和管理 172 | * 抓包和流量分析 173 | * 虚拟化与隔离 174 | * 逆向工程 175 | * 恶意文件识别(与 免杀) 176 | * 漏洞分析/挖掘 177 | 178 | :ref:`专业安全能力` 179 | ------------------------ 180 | 181 | .. toctree:: 182 | :maxdepth: 2 183 | :hidden: 184 | 185 | ./special_sec 186 | 187 | * Web 安全 188 | * 二进制安全 189 | * 移动安全 190 | * IoT安全 191 | * 浏览器安全 192 | * 区块链安全 193 | * AI 安全 194 | 195 | :ref:`工程化能力` 196 | ------------------------ 197 | 198 | .. toctree:: 199 | :maxdepth: 2 200 | :hidden: 201 | 202 | ./engineering 203 | 204 | * 研发能力 205 | * 编码环境 206 | * 前端 207 | * 爬虫进阶 208 | * 调度 209 | * 并发 210 | * 数据结构 211 | * 数据库 212 | * 大数据处理 213 | * DevOps 214 | * 调试 215 | * 持续集成 216 | * 协作 217 | * AI 应用 218 | * 设计思想 219 | 220 | 牛人 1, 2, 3 221 | ------------ 222 | 223 | * 1 研究:研究东西,有足够洞察力,研究水准不错 224 | * 2 研发:Hack Idea 自己有魄力实现,不懂研发的黑客如同不会游泳的海盗 225 | * 3 工程:研发出来的需要实战、需要工程化,否则只是玩具,而不能成为真的武器 226 | 227 | >_ -------------------------------------------------------------------------------- /special/special_sec.rst: -------------------------------------------------------------------------------- 1 | .. _专业安全能力: 2 | 3 | 专业安全能力 4 | ================== 5 | 6 | 正所谓术业有专攻,在自己的专业领域要有深度有沉淀。So many things to hack, such little time to work. 7 | 8 | Web安全 9 | ================== 10 | 11 | Web 常见漏洞类型 12 | --------------------- 13 | 14 | * 注入漏洞 15 | 16 | + SQL注入 17 | + XXE 18 | + 命令注入/代码注入 19 | + ... 20 | 21 | * XSS 22 | * CSRF 23 | * SSRF 24 | * 反序列化漏洞 25 | * 任意文件上传 26 | * ... 27 | 28 | Web 审计 29 | --------------------- 30 | 代码审计需要编程语言的基础,结合对漏洞类型的理解来进行,尽管Web后台/中间件使用了不同的语言与框架,但关注的点是共通的 31 | 32 | * http 请求中的参数获取,比如POST数据 33 | * 文件操作 34 | * 数据库接口 35 | * 系统命令执行 36 | * Session管理 37 | * 序列化与反序列化 38 | * 框架配置读取/插件加载 39 | * 编程语言特性,像是类继承/重载、字符串对比、include文件包含等等 40 | * ... 41 | 42 | 二进制安全 43 | ================== 44 | 45 | 二进制基础 46 | --------------------- 47 | 除了必修其他基础每多学一个,可以增加一倍二进制能力 48 | 49 | * 汇编语言(必修) 50 | 51 | + x86/x64 52 | + mips/mips64 53 | + arm/aarch64 54 | + ... 55 | 56 | * 计算机网络(重要) 57 | * 操作系统(搞内核安全的基础) 58 | * 数据结构、编译原理、计算机组成原理 59 | 60 | 二进制漏洞类型 61 | """""""""""""""""" 62 | 63 | * 栈溢出 64 | * 堆溢出 65 | * 整数溢出 66 | * UAF 67 | * double free 68 | * 空指针引用 69 | * 格式化字符串 70 | * 类型混淆 71 | * ... 72 | 73 | 二进制入门书籍推荐 74 | """""""""""""""""" 75 | 76 | * 《汇编语言》 77 | * 《深入理解Windows操作系统》 78 | * 《Windows驱动开发技术详解》 79 | * 《深入理解Linux内核架构》 80 | * 《CPU眼里的C/C++》 81 | * 《0day安全:软件漏洞分析技术》 82 | * 《漏洞战争:软件漏洞分析精要》 83 | * 《Exploit编写系列教程》 84 | 85 | Windows 86 | --------------------- 87 | 88 | Windows 开发 89 | """""""""""""""""" 90 | 91 | * Windows api 官方文档 92 | 93 | + `官方参考链接 `_ 94 | 95 | * Windows api hook 的原理与应用 96 | * Windows 驱动开发 97 | 98 | + `Windows 内核模式驱动程序设计指南 `_ 99 | + `Windows 进程间通信基础 `_ 100 | + `Windows 内核驱动示例 `_ 101 | 102 | * Windows 下通信机制 103 | 104 | + 通过 RPC 进行通信 105 | + 通过 COM 进行通信 106 | + 通过 管道 进行通信 107 | + 通过 剪贴板 进行通信 108 | 109 | Windows 分析调试 110 | """""""""""""""""" 111 | 112 | * `Windbg 官方文档 `_ 113 | 114 | * 符号表获取 115 | 116 | + `Microsoft 公共符号服务器 `_ 117 | 118 | * 双机调试 119 | 120 | + 常用于内核调试 121 | 122 | Windows 漏洞缓解措施 123 | """""""""""""""""""""" 124 | 125 | * 数据执行保护 DEP 126 | * 地址空间随机化 ASLR 127 | * 控制流保护 CFG 128 | * 管理模式执行保护 SMEP 129 | * 页表随机化 PageTable Randomization 130 | * 任意代码保护 ACG 131 | * 返回流保护 RFG 132 | * ... 133 | 134 | Linux 135 | -------------------- 136 | 137 | Linux 常见漏洞缓解措施 138 | """"""""""""""""""""""""" 139 | 140 | * 栈保护 stack canary 141 | * 禁止执行内存 NX (同 windows 中的DEP) 142 | * 地址空间随机化 ASLR 143 | * 位置无关可执行文件 PIE 144 | * 只读重定位 RELRO 145 | * 内核地址空间随机化 KASLR 146 | * 内核页表隔离 KPTI 147 | * 管理模式限制访问/执行 SMAP/SMEP 148 | * ... 149 | 150 | 移动安全 151 | ================= 152 | 153 | 关于测试机 154 | ---------------------- 155 | 可以找模拟器临时用,推荐有条件的还是买一个测试机(无论如何,不要用主力机搞测试!) 156 | 这里给出一些关键词,具体Root方案和环境配置要根据实际情况来 157 | 158 | * 开发人员选项、USB调试、OEM解锁,adb / fastboot 159 | * 刷机/获取Root:twrp、Magisk、KernelSU ... 160 | * Hook工具/框架:frida、Xposed(不维护以后又出现了EdXposed、LSPosed ...) 161 | * 抓包相关:了解一下Android 7之后App默认不信任用户CA证书的https抓包方案 162 | * 脱壳、Hook、调试工具,如何隐藏Root和Hook环境 163 | 164 | App 安全 165 | ---------------------- 166 | 167 | * 静态:硬编码的业务域名与API格式、用户数据存储/备份 ... 168 | * 动态:代码侧载(插件/热补丁) 、Content Provider/Service接口处理、deeplink注册、各种媒体解析器 ... 169 | * 通信:SSL证书绑定、敏感数据加解密 170 | 171 | Android 系统的结构层次 172 | ------------------------ 173 | 当前的移动操作系统其实是脱胎于PC操作系统(二进制安全),很多攻击面和漏洞会相互影响,还是要根据对应的系统层次来看 174 | 175 | * 应用层 176 | 177 | - App 安全 178 | 179 | * 应用框架层 180 | 181 | - 前端框架、系统组件、服务以及权限管理 182 | 183 | * 系统运行库层 184 | 185 | - libc 186 | - 媒体渲染 187 | - 数据库引擎 188 | - ... 189 | 190 | * 硬件抽象层 191 | 192 | * Linux 内核层 193 | 194 | - Binder 机制 195 | - 蓝牙协议栈 196 | - ... 197 | 198 | IoT安全 199 | ================ 200 | 201 | IoT安全涉及范围广泛,包括但不限于网络基础设施(如路由器和交换机)、工业控制系统、智能家居设备、无人机以及车联网等。 202 | 203 | IoT安全研究基础 204 | -------------------- 205 | 206 | * 协议分析,OSI七层网络模型 207 | * 嵌入式 Linux 系统方面知识 208 | * 实时系统 (VxWorks / FreeRTOS等) 209 | * 汇编语言 (Arm / mips / Risc-V) 210 | * 交叉编译环境 211 | * JTAG 调试接口规范 212 | * ... 213 | 214 | IoT相关工具 215 | ------------------- 216 | 217 | * Binwalk 218 | * IDA Pro 219 | * Qemu (qemu-system / qemu-user-static) 220 | * gdb / gdbserver 221 | * busybox 222 | * 无线电硬件 223 | 224 | - RTL-SDR 225 | - HackRF One 226 | - BladeRF 227 | - ... 228 | 229 | * UART 串口调试器 230 | * JTAG 硬件调试器 231 | * ... 232 | 233 | 无线电链路协议 234 | ---------------- 235 | 236 | * 近距离无线通信 237 | 238 | - NFC 239 | - RFID 240 | - 433/915 MHz频段遥控信号 241 | 242 | * 局域无线通信 243 | 244 | - Wifi 245 | - 蓝牙/低功耗蓝牙协议 246 | - ZigBee 247 | - Lora 248 | - ... 249 | 250 | * 基站通信 251 | 252 | - GSM 253 | - 3G 254 | - 4G/LTE 255 | - 5G 256 | - ... 257 | 258 | * 卫星通信 259 | 260 | - GPS 定位 261 | - 卫星电视 262 | - ... 263 | 264 | 通讯协议 265 | ------------ 266 | 267 | * 工控协议 268 | 269 | - S7Common 270 | - Modbus 271 | - ... 272 | 273 | * 无人机相关 274 | 275 | - MAVLink 276 | - ... 277 | 278 | * 车联网相关 279 | 280 | - DSRC 281 | - LTE-V2X 282 | - ... 283 | 284 | * 云服务通信协议 285 | 286 | - MQTT/MQTTX 287 | - CoAP 288 | - ... 289 | 290 | 硬件安全 291 | ------------ 292 | 293 | * 安全启动与完整性保护 294 | * 硬件调试接口 295 | * flash 加密 296 | * 硬件逆向工程 297 | * 处理器架构漏洞 298 | * 硬件侧信道问题 299 | 300 | 浏览器安全 301 | =============== 302 | 303 | 当前常见浏览器内核 304 | ----------------------- 305 | 306 | * Chrome 307 | 308 | - Chromium/Blink内核 309 | - v8引擎 310 | 311 | * Safari 312 | 313 | - WebKit内核 314 | - JavaScriptCore 315 | 316 | * Firefox 317 | 318 | - Gecko内核 319 | - SpiderMonkey 320 | 321 | * Internet Explorer (已弃用) 322 | 323 | - Trident内核 324 | - Chakra 325 | 326 | 浏览器漏洞分类 327 | ----------------------- 328 | 329 | * 解析器漏洞 330 | * DOM 漏洞 331 | * JS 引擎漏洞 (包括WASM) 332 | * 同源策略绕过(SOP-bypass)/通用跨站脚本 UXSS 333 | * ... 334 | 335 | 浏览器常见漏洞缓解措施 336 | ----------------------- 337 | 338 | * 站点隔离 339 | * 系统调用限制 / 基于虚拟化的沙箱 340 | * 堆隔离 Isolated heap 341 | * 延迟释放 Delayed free 342 | * 堆原数据保护 Heap metadata protection 343 | * 跨域隔离环境 COOP/COEP 344 | * ... 345 | 346 | 区块链安全 347 | ================ 348 | 349 | 用户安全参考 350 | ---------------------- 351 | 352 | * `区块链黑暗森林手册 `_ 353 | * `加密资产安全解决方案 `_ 354 | 355 | 开发安全参考 356 | ---------------------- 357 | 358 | * `Web3 项目安全实践要求 `_ 359 | 360 | 安全研究与审计 361 | ---------------------- 362 | 363 | * `慢雾智能合约审计技能树 `_ 364 | * `基于区块链的加密货币安全审计指南 `_ 365 | 366 | 367 | AI 安全 368 | ============= 369 | 370 | * 使用 AI 为现有的网络安全项目提供辅助,这一项应该放在本技能表的“工程化能力”章节来谈 371 | 372 | * 针对 AI 模型或训练过程的安全问题,可以了解一下“数据污染”、“数据后门”和“对抗性模型”等,由此引发的安全问题通常为以下三类: 373 | 374 | + 模型误判 375 | 376 | + 算力消耗、拒绝服务攻击 377 | 378 | + 训练数据泄露 379 | 380 | * 针对 AI 部署和应用构建的安全问题 381 | 382 | 通过提示词注入(Prompt Injection)能够让我们绕过应用的系统提示词(System Prompt)的限制,例如 383 | 384 | + 绕过 AI 对话应用的道德限制 385 | 386 | + 修改 AI 翻译应用的输出结果 387 | 388 | + 绕过 AI 驱动的内容审查机制 389 | 390 | 添加了更多功能的 AI 应用,提示词注入也能够使我们接触到应用中“传统安全”的那部分,例如 391 | 392 | + 在线信息获取,该功能会从指定 URL 获取信息,或是启动一个爬虫 393 | 394 | + Function Call功能,能够调用预设 API 接口 395 | 396 | + Code Interpreter功能,会创建一个隔离的容器环境,通常是docker 397 | 398 | 当下 AI 行业正在向着大模型、多模态的方向发展,基于 AI 的应用也在探索着各种新的可能,这将不断带来新的安全性的问题与讨论 399 | 400 | 作为初学还是有必要从内部了解 AI 大模型的构成与运行机制,推荐读一下《这就是ChatGPT》 401 | 402 | 持续学习,保持关注 `Seebug Paper AI安全 `_ 403 | 404 | >_ --------------------------------------------------------------------------------