2019年5月

404 Not Found的知识库

ps:以前学习的时候,学着学着就忘了,后来发现知识的结构化和体系化非常重要,于是从2019/01/12开始记录这之后的学习历程并结构化,还未完全归档。
知识库维护在https://github.com/404notf0und/Always-Learning/,最近更新日期:2019/05/20。

硬实力

软实力

正文:

计算机理论基础

操作系统

计算机网络

  • 常见面试题整理--计算机网络篇(每位开发者必备)
    TCP和UDP的区别,TCP三次握手和四次挥手,浏览器输入URL之后的流程,HTTP协议的请求类型,GET和POST的区别,ARP地址解析协议

  • 一次完整的浏览器请求流程
    页面(浏览器、HTTP)请求到响应经过的流程包括了TCP三次握手等系列流程,比如域名解析、发起TCP三次握手、发起HTTP请求、服务器响应HTTP请求,浏览器得到HTML代码、浏览器解析HTML代码,并请求HTML代码中的资源、浏览器对页面进行渲染呈现给用户。

  • tcp 的可靠性到底指的是什么? - CYS的回答 - 知乎
    TCP的可靠性是指基于不可靠的IP层在传输层提供可靠的数据传输服务,主要是指数据不会损坏或丢失,而且所有数据都是按照发送顺序进行传送。实现TCP的可靠性传输有以下机制:校验和(校验数据是否损坏)、定时器(分组丢失则重传)、序号(用于检测丢失的分组和冗余的分组)、确认(接收方告知发送方正确接收分组以及期望的下一个分组)、否定确认(接收方通知发送方未被正确接收的分组)、窗口和流水线(用于增加信道的吞吐量)。

数据结构与算法

  1. and quick sort,快排的思想是挖坑填数+分治。

  • 一道腾讯面试题:厉害了我的杯(学到了)
    解题方法1:二分法;解题方法2:分段查找区间法;解题方法3:基于数学方程的方法;解题方法4:动态规划法(学到了),用公式来描述就是:W(n, k) = 1 + min{max(W(n -1, x -1), W(n, k - x))}, x in {2, 3, ……,k}(n是杯子数,k是楼层数)

  • 如何有效的写算法题
    LeetCode上的题大致分为三种类型:考察数据结构:比如链表、栈、队列、哈希表、图、Trie、二叉树等;考察基础算法:比如深度优先、广度优先、二分查找、递归等;考察基础算法思想:递归、分治、回溯搜索、贪心、动态规划。

  • 浅谈什么是分治算法(学到了)
    分治思想下的全排列问题、归并排序问题、快速排序问题、汉诺塔问题。

  • 2018.08求职面经
    乱序数组中第k大的数,乱序数组中的中位数:快排指针,O(N)。

  • 【视频讲解】LeetCode 第 1 号问题:两数之和

数据库

  • 腾讯面试:一条SQL语句执行得很慢的原因有哪些?
    计算机理论基础-数据库:补充学习:数据库引擎(InnoDB支持事物处理和外键,但是慢一点、ISAM和MyISAM空间和内存使用低,插入数据快)、数据库编码(character_set_client、character_set_connection、character_set_database、character_set_results、character_set_server、character_set_system)、数据库索引(主键索引、聚集索引和非聚集索引)等基础知识点。一条SQL语句执行很慢的原因分为两类:1)大多数情况下正常,偶尔很慢:(1)数据库在刷新脏页,例如redo log写满了需要同步到磁盘;(2)执行的时候遇到锁,如表锁,行锁;2)一直都很慢:(1)没有用上索引:例如该字段没有索引;由于对字段进行运算、函数操作导致无法用索引;(2)数据库选错了索引,比较聚集索引到主键索引和直接全表搜索的扫描行数,有可能因为采样问题判断有误,走了全表扫描而不走索引。

计算机技术基础

语言

  • 万字长文深度解析Python装饰器

  • Python3 迭代器与生成器
    迭代器有两个基本的方法:iter()和next(),字符串、元组、列表等可迭代对象都可用于创建迭代器(这是因为这些类内部都实现了__iter__()函数,调用iter()之后,变成了一个list_iterator的对象,会发现增加了__next__()方法,所有实现了__iter____next__两个方法的对象,都是迭代器),迭代器是带状态的对象,它会记录当前迭代所处的位置,以方便下次迭代的时候获取正确的元素,__iter__返回迭代器自身,__next__返回容器的下一个值。生成器:使用了yield的函数被称为生成器,调用了一个生成器函数,返回的是一个迭代器对象,生成器可以看成是迭代器。

  • python 黑科技之迭代器、生成器、装饰器

  • Python的高级特征你知多少?来对比看看
    lamda匿名函数,功能是执行某种简单的表达式或运算,而无需完全定义函数;Map函数是一种内置的python函数,可以将函数应用于各种数据结构中的元素;Filter内置函数与Map函数类似,但是只返回应用函数返回True的元素;Itertools模块是处理迭代器的工具集合,迭代器是一种可以在for循环语句中使用的数据类型;Generator函数是一个类似迭代器的函数。

  • 为什么要使用 Go 语言?Go 语言的优势在哪里?
    go的优势和go的用处。go的优势主要有:静态语言,多并发,跨平台,可直接编译成机器码,丰富的标准库等。go的用处主要有服务器编程、网络编程、分布式系统、内存数据库、云平台。

  • Gin实践 连载一 Golang介绍与环境安装
    go的环境安装,环境安装后各个文件夹的含义;go的工作区,工作区各个文件夹的含义。

  • ruby-on-rails – Ruby和JRuby有什么区别
    Ruby是一种编程语言,我们一般说的Ruby解释器是指CRuby,CRuby在本地C语言解释器环境中运行,JRuby是一个采用纯Java实现的Ruby解释器,JRuby在Java虚拟机中运行。

框架

工具

  • spark与storm的对比
    从实时计算模型、实时计算延迟度、吞吐量、事物机制、健壮性/容错性、动态调整并行度等方面来比较。spark streaming是准实时模型,对一个时间段内的数据收集起来,作为一个RDD,再处理,实时计算延迟度为秒级,吞吐量大,支持事物机制但不够完善,健壮性一般,不支持动态调整并行度;而storm是纯实时模型,来一条数据,处理一条数据,实时计算延迟度为毫秒级,吞吐量小,支持完善的事物机制,健壮性强,支持动态调整并行度。应用场景:对于storm,可以在纯实时不能忍受1秒以上延时的场景下使用;对于实时计算的功能中,要求可靠的事物机制和可靠性机制,即数据处理完全就精确,也可以考虑storm;如果还需要针对高峰低峰时间段,动态调整实时计算程序的并行度,以最大限度利用资源,也可以考虑storm;如果项目中就是纯粹的实时计算,不需要在中间执行SQL交互式查询等其他操作,用storm是较好的选择。反之如果不要求纯实时,不要求可靠的事物机制,不要求动态调整并行度,可以考虑spark streaming,spark streaming最大的优势在于处于spark生态技术栈中,从项目的宏观角度考虑,如果不仅要求实时计算,还要离线批处理、交互式查询,而且在实时计算中,也会牵扯到高延迟批处理、交互式查询等功能,那么可以用spark core开发离线批处理,spark sql开发交互式查询,用spark streaming开发实时计算,无缝整合,给系统提供高扩展性,这个特点大大增强了spark streaming的优势。两个框架擅长的细分场景不同。

  • 子雨大数据之Spark入门教程(Python版)(比较重要)

  • Mac快捷键大全
    MAC:基础快捷键:截图、在应用程序中、文本处理、在finder中、在浏览器中;MAC启动和关机时的快捷键。

  • 日志采集系统flume和kafka有什么区别及联系,它们分别在什么时候使用,什么时候又可以结合?
    大数据技术工具-中间件类型:可以把kafka理解成中间件,或是cache系统,或是数据库,主要作用是维稳。可以把flume理解成日志数据的主动收集,与kafka相比,很难推动线上应用修改接口往kafka中写入数据。

  • logstash 和 flume 之间的优劣,和各自所适合的场景?
    大数据技术工具-Agent类型:看需求,logstash和flume都是作为agent的存在,logstash有更多的插件,有更好的配套产品elasticsearch等,但是logstash的开发语言是ruby,运行环境是JRuby,而且传输数据可能会丢失;flume内部有机制确保传输一定量级数据不丢失的问题,flume的开发语言是Java,易于二次开发,但是不足是jvm占用内存有点大。

  • 常用 Git 命令单
    Git:远程仓库-》本地仓库-〉暂存区-》工作区,git add .、git commit -m message、git push。

技术

  • 解码与xss(原文中有一处错误“html实体编码后“应该是\u72 产生的原因就是浏览器的html自解码)
    浏览器技术-解码顺序:浏览器解码主要涉及到两个部分:渲染引擎和js解析器。解码顺序:在什么环境下就进行什么解码,解码顺序为:最外层的环境对应的编码最先解码。举个例子:在<a href=javascript:alert(1)>click</a>中alert(1)处在html->url->js环境中。

    `1、<a href=javascript:al\u65rt(1)>click</a> 采用unicode编码e,html和url环境下都不能解码,只有在js环境下才能解码为字符e,所以不会弹窗`
    `2、<a href=javascript:al%65rt(1)>click</a> 采用url编码,在执行js前,url解码%65,所以到了js引擎启动时,看到了完整的alert(1)`
    `3、<a href=javascript:alert(1)>click</a> html实体解码先执行了`
    `4、<a href=java%61script:alert(1)>click</a> 在url解码环节,不会认为javascript是伪协议,会出现错误。`
    `5、<a href=# onclick="alert('&#x27;&#x29;;alert&#x28;&#x27;2');">click</a> htmlparser会优先于JavaScript parser执行,所以解析过程是htmlencode的字符先被解码,然后执行JavaScript事件`
    **浏览器解码顺序是XSS中bypass的基础**。
  • 数据分析与可视化:谁是安全圈的吃鸡第一人(学到了)
    数据分析与可视化:收集数据集--->观察数据集--->社群发现与社区关系--->玩家画像。

  • dockerfile 和 docker-compose 的关系
    docker技术:文件和文件夹的关系。

  • dockerfile 与 docker-compose的区别是什么?
    docker技术:docker-compose是编排容器的。

  • 堡垒机是什么?
    堡垒机技术:为访问集群限定一个入口;方便权限控制以及监控。

  • 产品的可行性需从哪几个方面分析?
    可行性分析:产品可行性分为:技术可行性、经济可行性、社会可行性,其中我关注的是技术可行性。技术可行性主要从竞争对手功能比较、技术风险及规避方法、易用性及用户使用门槛、产品环境依赖性等方面衡量。

  • Nginx、Gunicorn在服务器中分别起什么作用?
    应用服务器:Nginx部署场景:负载均衡(tornado之类的框架只支持单核,所以多进程部署需要反向负载均衡。gunicorn本身就是多进程其实不需要)、静态文件支持、抗并发压力、额外的访问控制。

  • 维基百科:Kerberos
    Kerberos:Kerberos的基本描述、协议内容和具体流程。

底层研究

  • python requests库流程简析
    计算机网络-python requests库实现:socket->httplib->urllib->urllib3->requests。requests.get的内部调用流程:requests.get->requests()->Session.request->Session.send->adapter.send->HTTPConnectionPool(urllib3)->HTTPConnection(httplib)。

    1、socket:是TCP/IP最直接的实现,实现端到端的网络传输
    2、httplib:基于socket库,是最基础最底层的http库,主要将数据按照http协议组织,然后创建socket连接,将封装的数据发往服务端
    3、urllib:基于httplib库,主要对url的解析和编码做进一步处理
    4、urllib3:基于httplib库,相较于urllib更高级的地方在于用PoolManager实现了socket连接复用和线程安全,提高了效率
    5、requests:基于urllib3库,比urllib3更高级的是实现了Session对象,用Session对象保存一些数据状态,进一步提高了效率
  • XGBoost原理和底层实现剖析(学到了)
    XGBoost:从树的分数(目标函数:损失函数(二阶展开)+正则项),树的结构(分裂决策(预排序))方面理解。

  • Lightgbm 直方图优化算法深入理解
    Lightgbm:相较于预排序而言,lgb采用了直方图来处理节点分裂,寻找最优分割点。算法思想:在训练前预先把特征值转化为bin value,也就是对每个特征的取值做分段函数,将所有样本在该特征上的取值划分到某一段(bin)中,最终把特征取值从连续值转化为离散值。直方图也可以用来做差加速,计算直方图的复杂度是基于桶的个数的。

安全技术

Web安全

  • 一篇文章带你深入理解漏洞之 XXE 漏洞
    XXE漏洞:XXE的原理:调用外部实体,XXE的利用:利用通用实体、参数实体、外部实体、内部实体进行文件读取,内网主机和端口探测、内网RCE(php下需要expect扩展的支持)

  • mysql无逗号的注入技巧
    注入攻击:sql注入、xml注入(一种标记语言,通过标签对数据进行结构化表示)、代码注入(eval类)、CRLF注入(rn)。Mysql injection:使用注释绕过空格,使用括号绕过空格,使用%20 %0a等符号替换空格;union查询下,使用join绕过逗号过滤,select id,ip from client_ip where 1>2 union select * from ( (select user())a JOIN (select version())b ); 使用select case when(条件) then 代码1 else 代码2 end绕过逗号过滤,insert into client_ip (ip) values ('ip'+(select case when (substring((select user()) from 1 for 1)='e') then sleep(3) else 0 end));

  • SSRF漏洞利用与getshell实战(精选)

  • SSRF漏洞中绕过过滤(IP限制)的几种方法总结
    SSRF:利用302跳转(xip.io、短地址、自写服务);DNS 重绑定(绕过IP限制);更改IP地址写法;利用解析URL所出现的问题:http://www.baidu.com@192.168.0.1/;通过各种非HTTP协议

  • SSRF绕过方法总结
    SSRF:利用@;利用短地址;利用特殊域名xip.io;利用DNS解析(在域名上设置A记录);利用进制转换;利用句号

  • ThinkPHP 5.0.0~5.0.23 RCE 漏洞分析

  • 浅析白盒审计中的字符编码及SQL注入(优秀,学到了)
    基于字符编码的注入攻击:一个gbk编码的汉字,占2个字节,一个utf-8编码的汉字,占用3个字节。宽字节注入是利用mysql的特性,mysql在使用gbk编码的时候,会认为两个字符是一个汉字(gbk下,前一个ascii码要大于128,才到汉字的范围;gb2312的编码取值范围:高位0xA1-0xF7,低位0xA1-0xFE,而\0x5c,不在低位范围中,所以0x5c不是gb2312中的编码,所以不会被吃掉。把这个思路拓宽到所有的多字节编码,只要低位的范围中含有0x5c的编码,就可以进行宽字节注入)。防御方案一:mysql_set_charset+mysql_real_escape_string,考虑到连接的当前字符集。防御方案二:将character_set_client设置为binary(二进制),SET character_set_connection=gbk, character_set_results=gbk,character_set_client=binary。当我们的mysql接受到客户端的数据后,会认为他的编码是character_set_client,然后会将之将换成character_set_connection的编码,然后进入具体表和字段后,再转换成字段对应的编码。然后,当查询结果产生后,会从表和字段的编码,转换成character_set_results编码,返回给客户端。所以,我们将character_set_client设置成binary,就不存在宽字节或多字节的问题了,所有数据以二进制的形式传递,就能有效避免宽字符注入。防御过后调用iconv时也可能出现问题。使用iconv对utf-8转gbk时,利用方式是錦',原因是它的utf-8编码是0xe98ca6,它的gbk编码是0xe55c,最后变成%e5%5c%5c%27,两个%5c就是\,正好把反斜杠转义了。使用iconv对gbk转utf-8时,利用方式直接用宽字节注入。一个gbk汉字2字节,utf-8汉字3字节,如果我们把gbk转换成utf-8,则php会每两个字节一转换。所以,如果\'前面的字符是奇数的话,势必会吞掉\'逃出限制。为什么不能用錦'这种方式呢,根据utf-8编码规则,\(0x0000005c)不会出现在utf-8编码中,所以会报错。

  • 客户端session导致的安全问题

  • 一文洞悉DAST、SAST、IAST ——Web应用安全测试技术对比浅谈(学到了)

  • 谈谈SAST/IDAST/IAST

  • PHP 连接方式介绍以及如何攻击 PHP-FPM

数据安全

  • NO.27 闲扯 关于数据安全
    大数据技术、时代,数据是很多公司最核心的资产;传统的安全边界模糊,我们需要假设我们边界已经被渗透的同时,拥有纵深防御能力,保护信息的安全。所以在加强传统安全手段的同时,我们更应该直接把安全的重点放在数据本身上,这就是数据安全所做的工作。在做之前,有一个前提:我们要知道安全依然是为业务服务的(大部分企业安全情况下,业务>安全),所以要权衡安全性和可用性。目前企业常用的措施主要有:数据分级、数据生命周期管理、数据脱敏&数据加密、数据防泄漏。

渗透测试

  • 一套实用的渗透测试岗位面试题
    代码执行函数:eval、preg_replace+/e、assert、call_user_func、call_user_func_array、create_function;命令执行函数:system、exec、shell_exec、passthru、pcntl_exec、popen、proc_open;img标签除了onerror属性外,还有其他获取管理员路径的方式吗?src指定一个远程的脚本文件,获取referer。

云安全

  • 云安全,到底是什么一回事?
    云安全三大研究方向:云计算安全、安全基础设施的云化、云安全服务。在云安全未来发展趋势中也提到了数据安全协作,说明无论哪种场景,数据都是安全的重点关注对象。云安全服务可以看成厨师做饭(来自cdxy的ppt),云计算(能源)、算法(工具)、数据(原料)、工程师(厨师)、能做成什么样的饭(能提供的安全服务)

安全研究

APT检测

  • APT detection based on machine learning
    APT检测模型:本篇论文提出一种APT检测模型,通过在APT生命周期的多个环节进行检测,并将各个环节告警事件进行关联,并使用机器学习训练检测模型。和我的想法略有相似,之前想过可以用图模型或者规则关联算法进行关联以此重构攻击链,但是本篇文章好像是把关联的事件集作为输入数据输入到一个预测模型中去训练。这么做的目的是要完整地描述一个APT场景下的安全事件集,降低误报率,提高准确率,避免传统APT单环节检测造成的漏报、误报的问题。但是本文也存在一些问题,比如缺少APT数据源问题,缺少安全数据一直是个难题,导致本文提出的模型未能在真实的环境中论证。

恶意样本

  • 利用机器学习检测HTTP恶意外连流量(优秀)
    恶意HTTP外连流量检测总体思路1、数据收集,沙箱运行恶意样本,收集恶意流量,人工区分恶意流量和白流量,再根据威胁情报对恶意流量划分家族。2、数据分析(特征工程):同一家族恶意外连流量的相似性,可以考虑使用聚类算法将同一家族的流量聚为一类,提取它们的共性,形成模板,再用模板检测未知流量。3、算法:训练阶段:提取HTTP外连流量--->提取请求头字段--->泛化--->相似度计算(请求头中字段特异性加权再计算相似性)--->层次聚类--->生成恶意外连流量模板(聚类中该字段并集作为该字段在模板中的值)。检测阶段:未知HTTP外连流量--->提取请求头字段--->泛化--->与恶意模板匹配--->判断相似度是否超过阈值(阈值确定)

对抗机器流量

  • 2018 Bad Bot Report
    对抗机器流量:安全对抗促使攻击手段进化,进入了自动化对抗的阶段,参差不齐的爬虫、撞库、模拟器产生了大量的机器流量,这其中搜索引擎类的爬虫、自动更新的RSS订阅服务器产生了正常的机器流量,而恶意爬虫等模仿正常用户的请求产生了恶意的机器流量,模仿的程度也不同,简单点的恶意机器流量直接通过脚本产生,高级点的通过浏览器产生,比如headless browser,更高级的可以模拟鼠标移动和点击。可以根据网络环境(Amazon ISP、data centers、global hosting providers)、使用工具(机器流量的browser喜欢伪装成Chrome、Firefox、Internet explorer、Safari)、是否模仿人类交互,比如鼠标轨迹和点击来区分机器流量和正常用户流量。一旦它们发现我们尝试阻止它们,高级恶意机器流量APBs就会展现出persistent和adaptive,进行多模式转换。防御:理解我方业务和敌方目标。抑制过时的UA/Browser;抑制知名的主机服务商;保护敏感API;根据源流量观察高低峰段(波形?);调查该恶意机器流量的sign,即显著性标志;监控失败的登录尝试;监控未能正确验证礼品卡的失败次数;注意公开的数据泄露,以防撞库;

恶意URL检测

Red Tean

  • Red Team从0到1的实践与思考(学到了)
    Red Team的定义--->Red Team的目标(学习和利用已知真实攻击者的TTPs来攻击、评估现有防御能力的有效性以及识别防御体系的弱点并提出具体的应对方案、利用真实有效的模拟攻击来评估因为安全问题造成的潜在的业务影响)--->谁需要Red Team--->Red Team如何工作(基本构成:知识储备、基础架构、技术研究能力;工作流程:全阶段攻击模拟、分阶段攻击模拟;协作配合)--->Red Team的量化和考核(已知TTPs的覆盖率、检测率/检测时间/检测阶段、阻断率/阻断时间/阻断阶段)--->Red Team的成长与提高(仿真环境训练、漏洞分析与技术研究、外部交流与分享)

  • ATT&CK APT组织TTPs总结

  • ATT&CK全平台攻击技术总结

  • 真实APT组织分析报告汇总

WAF

异常检测

图与安全

人工智能

算法体系

  • 机器学习算法集锦:从贝叶斯到深度学习及各自优缺点
    人工智能-算法体系:主要从算法的定义、过程、代表性算法、优缺点解释回归、正则化算法、人工神经网络、深度学习||决策树算法、集成算法||支持向量机||降维算法、聚类算法||基于实例的算法||贝叶斯算法||关联规则学习算法||图模型。个人理解:回归系列主要基于线性回归和逻辑回归衍生,包括回归、正则化算法、人工神经网络、深度学习;树系列主要基于决策树衍生,包括决策树和基于树的集成学习算法;支持向量机属于老牌算法;降维算法和聚类算法主要基于数据的内在结构描述数据;基于实例的算法实际上并没有训练的过程,代表性算法是KNN,基于记忆的学习;贝叶斯算法利用贝叶斯定理计算输出概率;关联规则学习算法能够提取数据中变量之间的关系的最佳解释;图模型是一种概率模型,可以表示随机变量之间的条件依赖结构。

  • Categories of algorithms non exhaustive (学到了)
    人工智能-算法体系:学到了搭建自己的算法体系。

基础知识

  • 分类模型评估之ROC-AUC曲线和PRC曲线
    模型评估:ROC、AUC、PRC。

  • SVM和logistic回归分别在什么情况下使用?
    算法使用场景-SVM和逻辑回归使用场景:需要根据特征数量和训练样本数量来确定。如果特征数相对于训练样本数已经够大了,使用线性模型就能取得不错的效果,不需要过于复杂的模型,则使用LR或线性核函数的SVM。如果训练样本足够大而特征数较小的情况下,可以通过复杂核函数的SVM来获得更好的预测性能,如果样本没有达到百万级,使用复杂核函数的SVM也不会导致运算过慢。如果训练样本特别大,使用复杂核函数的SVM已经会导致运算过慢了,因此应该考虑引入更多特征,然后使用线性SVM或者LR来构造模型。

  • HTTP DATASET CSIC 2010
    安全数据集-CSIC2010:基于e-Commerce Web应用自动化生成的安全数据集,包含36000个正常请求和25000个异常请求,异常请求包括:SQL注入、缓冲区溢出、信息收集、文件泄露、CRLF注入、XSS等。

  • 分类模型的性能评估——以 SAS Logistic 回归为例 (3): Lift 和 Gain

  • 机器学习中非均衡数据集的处理方法?
    非均衡数据集:上采样和下采样、正负样本的惩罚权重(scikit-learn的SVM为例:class_weight:{dict,'balanced'})、组合/集成方法(从大样本中抽取多个小样本训练模型再集成)、特征选择(小样本量具有一定规模的时候,选择显著型的特征)

  • 机器学习算法中 GBDT 和 XGBOOST 的区别有哪些?
    算法比较:GBDT基分类器为CART,XGB的分类器可以是多种基分类器,比如线性分类器,这时候就相当于L1、L2正则项的逻辑回归或线性回归;传统的GBDT在优化时用到的是一阶导数,XGB则对损失函数进行了二阶泰勒公式的展开,精度变高;XGB并行处理(特征粒度的并行,对特征值进行预排序存储为block结构,在进行节点分类的时候,需要计算每个特征的增益,最终选择增益最大的那个特征去做分类,那么各个特征的增益计算就可以开多线程进行),相对于GBM速度飞跃;剪枝时,当新增分类带来负增益时,GBM会停止分裂,而XGB一直分类到指定的最大深度,然后进行后全局剪枝;从最优化的角度来看,GBDT采用的是数值优化的思维,用的最速下降法去求解Loss function的最优解,其中用CART决策树去拟合负梯度,用牛顿法求步长,而XGB用的是解析的思维,对Loss function展开到二阶近似,求得解析解,用解析解作为Gain来建立决策树,使得Loss function最优。

  • gbdt的残差为什么用负梯度代替?

  • 机器学习算法常用指标总结
    模型评估

机器学习

深度学习

应用领域

  • 全球最全?的安全数据网站(有时间得好好整理一下)

  • 网络安全即将迎来机器对抗时代?
    智能安全-智能攻击:国外已经在研究利用机器学习打造更智能的攻击工具,比如深度强化学习,就是深度学习和强化学习的结合,可以感知环境,做出最优决策,可能被应用到漏洞扫描器里,使扫描器能够自动化地入侵目标。个人理解:国外已有案例Deep Exploit就是利用深度强化学习结合metasploit进行自动化地渗透测试,国内还没有看到过相关公开案例。由于学习门槛高、安全本身攻击场景需要精细化操作、弱智能化机器学习导致的机器学习和安全场景结合深度不够等一系列的问题,已有的机器学习+安全的大多数研究主要集中在安全防护方面,机器学习+攻击方面的研究较少且局限,但是我相信这个场景很有潜力,或许以后就成为蓝方的攻击利器。

  • 初探机器学习检测 PHP Webshell

  • 基于机器学习的 Webshell 发现技术探索

  • 人工智能反欺诈三部曲之:设备指纹
    智能安全-业务安全-设备指纹:ip、cookie、设备ID主动式设备指纹:使用JS或SDK从客户端抓取各种各样的设备属性值,然后组合,通过hash算法得到设备ID;优点:Web内或者App内准确率高。缺点:主动式设备指纹在Web与App之间、不同的浏览器之间,会生成不同的设备ID,无法实现跨Web和App,不同浏览器之间的设备关联;由于依赖客户端代码,指纹在反欺诈的场景中对抗性较弱。被动式设备指纹:从数据报文中提取设备OS、协议栈和网络状态的特征集,并结合机器学习算法识别终端设备。优点:弥补了主动式设备指纹的缺点。缺点:占用处理资源多;响应时延比主动式长。

  • 机器学习在互联网巨头公司实践
    入侵检测:机器学习和统计建模的主要区别:机器学习主要依赖数据和算法,统计建模依赖建模者对数据特征的了解。两者的优缺点:机器学习:打标数据难获取,如果采用非监督学习,则性能不足以运维;机器学习结果不可解释。所以现在机器学习在做入侵检测的时候,一般都要限定一个特定的场景。统计建模:数据预处理阶段移除正常数据的干扰(重点关注查全率,强调过正常数据的过滤能力,尽可能筛除正常数据),构建能够识别恶意可疑行为的攻击模型(重点关注precision,强调模型对异常攻击模式判断的准确性,攻击链模型),缺点是泛化能力不足、在入侵检测一些场景中,模型易被干扰。我们的最终目的:大数据场景下安全分析可运维。

  • Web安全检测中机器学习的经验之谈
    Web安全:从文本分类的角度解决Web安全检测的问题。数据样本的多样性,短文本分类,词向量,句向量,文本向量。文本分类+多维度特征。与传统方法做对比得出更好的检测方式:传统方法+机器学习:传统waf/正则规则给数据打标;传统方法先进行过滤

  • 词嵌入来龙去脉(学到了)
    NLP:DeepNLP的核心关键:语言表示--->NLP词的表示方法类型:词的独热表示和词的分布式表示(这类方法都基于分布假说:词的语义由上下文决定,方法核心是上下文的表示以及上下文与目标词之间的关系的建模)--->NLP语言模型:统计语言模型--->词的分布式表示:基于矩阵的分布表示、基于聚类的分布表示、基于神经网络的分布表示,词嵌入--->词嵌入(word embedding是神经网络训练语言模型的副产品)--->神经网络语言模型与word2vec。

  • 深入浅出讲解语言模型
    NLP:NLP统计语言模型:定义(计算一个句子的概率的模型,也就是判断一句话是否是人话的概率)、马尔科夫假设(随便一个词出现的概率只与它前面出现的有限的一个或几个词有关)、N元模型(一元语言模型unigram、二元语言模型bigram)。

  • 有谁可以解释下word embedding? - YJango的回答 - 知乎
    NLP:单词表达:one hot representation、distributed representation。Word embedding:以神经网络分析one hot representation和distributed representation作为例子,证明用distributed representation表达一个单词是比较好的。word embedding就是神经网络分析distributed representation所显示的效果,降低训练所需的数据量,就是要从数据中自动学习出输入空间到distributed representation空间的映射f(相当于加入了先验知识,相同的东西不需要分别用不同的数据进行学习)。训练方法:如何自动寻找到映射f,将one hot representation转变成distributed representation呢?思想:单词意思需要放在特定的上下文中去理解,例子:这个可爱的 泰迪 舔了我的脸这个可爱的 京巴 舔了我的脸,用输入单词 x 作为中心单词去预测其他单词 z 出现在其周边的可能性(至此我才明白为什么说词嵌入是神经网络训练语言模型的副产品这句话)。用输入单词作为中心单词去预测周边单词的方式叫skip-gram,用输入单词作为周边单词去预测中心单词的方式叫CBOW。

  • 风险大脑支付风险识别初赛经验分享【谋杀电冰箱-凤凰还未涅槃】
    智能安全-业务安全-风控:个人理解见:https://github.com/404notf0und/Risk-Operation-Detection/blob/master/atec.ipynb

综合素质

  • 算法工程师必须要知道的面试技能雷达图(学到了)
    人工智能-综合素质:算法工程师必备技术素质拆分:知识、工具、逻辑、业务。在满足最小要求的基础上,算法工程师在这四个方面的能力是相对全面的,既包括”算法“,也包括”工程“,而大数据工程师则着重”工具“,研究员则着重”知识“和”逻辑“。针对安全业务的算法工程师就是安全算法工程师。为了便于理解,举个例子,如果用XGBoost解决某个安全问题,那么可以由浅入深理解,把知识、工具、逻辑、业务四个方面串起来:

    1.GBDT的原理(知识)
    2.决策树节点分裂时是如何选择特征的?(知识)
    3.写出Gini Index和Information Gain的公式并举例说明(知识)
    4.分类树和回归树的区别是什么(知识)
    5.与Random Forest对比,理解什么是模型的偏差和方差(知识)
    6.XGBoost的参数调优有哪些经验(工具)
    7.XGBoost的正则化和并行化分别是如何实现的(工具)
    8.为什么解决这个安全问题会出现严重的过拟合问题(业务)
    9.如果选用一种其他模型替代XGBoost或改进XGBoost你会怎么做?为什么?(业务、逻辑、知识)。
    以上,就是以“知识”为切入点,不仅深度理解了“知识”,也深度理解了“工具”、“逻辑”、“业务”。
  • [[校招经验] BAT机器学习算法实习面试记录](http://rs.xidian.edu.cn/forum.php?mod=viewthread&tid=929712&extra=page%3D1)(学到了)
    面试:根据面试常遇到的问题再深入理解机器学习,储备自己的算法知识库。

  • 机器学习如何才能避免「只是调参数」?(学到了)
    职业发展机器学习工程师分为三种:应用型(能力:保持算法全栈,即数据、建模、业务、运维、后端,重点在建模能力,流程是遇到一个指定的业务场景应该迅速知道用什么数据做特征,用什么模型,这个模型在工程上的时效性和鲁棒性,最终会不会产生业务风险等一整套链路。预期目标:锻炼得到很强的业务敏感性,快速验证提出的需求)、造轮子型(多读顶会跟上时代节奏,且拥有超强的功能能力,打造ML框架,提供给应用型机器学习工程师使用)、研究型(AI Lab,读论文+试验性复现)。个人发展:锻炼业务能力和工程能力,未来几年成长规划还是算法全栈路线,技术上独挡一面,业务上带来kpi,以后快速晋升+带队。同时保持阅读习惯,多学习新知识。

  • 做机器学习算法工程师是什么样的工作体验?
    工作体验:业务理解、数据清洗和特征工程、持续学习(增强解决方案的判断力)、编程能力、常用工具(XGB、TensorFlow、ScikitLearn、Pandas(表格类数据或时间序列数据)、Spark、SQL、FbProphet(时间序列))

  • 大三实习面经(学到了)

  • 如果你是面试官,你怎么去判断一个面试者的深度学习水平?
    心得体会:深度学习擅长处理具有局部相关性的问题和数据,在图像、语音、自然语言处理方面效果显著,因为图像是由像素构成,语音是由音位构成,语言是由单词构成,都有局部相关性,可以构造高级特征。

  • 面试官如何判断面试者的机器学习水平? - 微调的回答 - 知乎
    心得体会:考虑方法优点和局限性,培养独立思考的能力;正确判断机器学习对业务的影响力;学会分情况讨论(比如深度学习相对于机器学习而言);学习机器学习不能停留在“知道”的层次,要从原理级学习,甚至可以从源码级学习,知其然知其所以然,要做安全圈机器学习最6的。

  • 两年美团算法大佬的个人总结与学习建议
    综合素质-心得体会:算法的基本认识(知识)、过硬的代码能力(工具)、数据处理和分析能力(业务和逻辑)、模型的积累和迁移能力(业务和逻辑)、产品能力、软实力。

  • 阿里技术副总裁贾扬清:我对人工智能的一点浅见
    AI发展:神经网络和深度学习的成功与局限,成功原因是大数据和高性能计算,局限原因是结构化的理解和小数据上的有效学习算法。AI这个方向会怎么走?传统的深度学习应用,比如图像、语音等,应该如何输出产品和价值?而不仅仅是停留在安防这个层面,要深入到更广阔的领域。除了语音和图像之外,如何解决更多问题?而不仅仅是停留在解决语音图像等几个领域内的问题。

企业安全建设

安全数据分析

  • Data-Knowledge-Action: 企业安全数据分析入门(优秀,学到了)
    综述1、让模型理解业务,基于业务历史行为建立异常基线,在异常的基础上检测威胁;将运营结果反馈到模型,将误报视作正常行为回流。2、安全运营可运营,降低事件调查成本,自动化信息收集与聚合。3、随着数据的积累,安全数据分析将向基于图结构的高级知识表达方式发展。(这点深表赞同)4、对场景、攻击模式、数据的认识深度,远比选择工具重要。

  • Security Data Science Learning Resources
    综述:作者的研究点也是安全数据科学,整理了一些学习方法和学习资源。学习方法主要分为三个方面:谷歌学术、Twitter、安全会议。谷歌学术关注知名研究者以及他们新出的文章,关注引用了你关注的文章的文章,Twitter关注细分安全领域的人群,关注安全会议以及会议议程。学习资源:书籍和课程。

  • 快速搭建一个轻量级OpenSOC架构的数据分析框架(一)(学到了)
    框架行文思路:由粗变细(由框架到举例子(由框架到场景到实际架构))。OpenSOC介绍(框架组成和工作流程)---》构建轻量级OpenSOC(聚焦具体场景和工具及具体架构)---》搭建步骤(每一步的环境搭建及配置)---》效果展示。

安全场景

安全系统

安全思考

  • 谈谈互联网企业安全的发展方向
    安全思考-发展方向:由浅入深分为四个目标:1、消灭漏洞驱使,第一个目标是让工程师写出的每一行代码都是安全的,由此诞生SDL,SDL又衍生技术研究和技术产品,比如代码安全扫描工具的研究和fuzzing。2、有了SDL还无法100%安全,所以第二个目标是让所有已知、未知的攻击,都能在第一时间发现,并迅速报警和追踪。挑战:海量数据和复杂需求 方案:超强计算能力和立体化模型。3、第三个目标是让安全成为公司的核心竞争力,深入到每个产品的特性中,能够更好地引导用户使用互联网的习惯。4、最后一个目标是能够观测到整个互联网安全趋势的变化,对未来一段时间内的风险做出预警。在互联网公司做安全一定要有想象力,同时紧密关注其他技术领域的发展,这样就不会止步于几种漏洞的研究,而会发现有很多有趣的事情正等着去做,这是一个非常宏伟的蓝图。

  • 以攻促防:企业蓝军建设思考

  • 赵彦的CISO闪电战|两年甲方安全修炼之路(学到了)
    范围对象(公司业务、挑战及安全需求(纵深防御、自身供应链安全、赋能第三方安全))--->目标设定(当下需求设定和未来发展)--->挑战(团队全栈(知识结构和技能对口主营业务)、工程能力、管理能力)--->分解安全体系(通用领域安全建设沙盘图:研发安全、IT安全、基础设施安全、数据安全、终端安全、业务安全、隐私与安全合规)--->实现和应对(安全治理框架、业界对标(真正落地能力,demo不算有此能力)、安全研究)。总的来说,就是全栈技术视野(努力从技能层面上升到技术视野层面)+安全管理能力。

安全管理

安全发展

安全面经

  • 有关安全的面经, 实习, etc
    实习面经:滴滴、百度(2)、360(2)、阿里(6)、腾讯(3)、b站、华为、同花顺、蘑菇街。总的来看,大佬们好强,选择大多是甲方安全部。我的理解:看了大佬们的面经和被问到的问题,真的是五花八门,有bin方向的,有数据安全方向的,也有安全运营方向的等等,有一些参考价值,但是因为方向不同,不能生硬照搬,还是得发挥自己的专长,先做自己小领域的领域专家。

  • 2018春招安全岗实习面试总结

  • 腾讯2016实习招聘-安全岗笔试题答案详细解释
    实习笔试:设计一个安全的web身份验证方案:前端:验证码+csrf_token+基于时间戳加密生成随机数;把身份信息传输到服务器后台,并且设置同源策略(同源网站:域名、端口、协议);服务器端验证客户端身份后,通过随机数加密session和cookie返回客户端;客户端与服务器端建立连接。

能看到最后的人都很好看—:)