应用安全面试题目
应用安全主要确保软件应用在需求、设计、研发、测试、部署、升级等全生命周期的安全性。
应用安全往往是各家企业都有配置资源建设,且往往都是重要方向。此处应用安全定义为基础设施之上运行的软件服务,主要分为应用安全、供应链安全、移动端安全、IoT安全、Web3安全以及AI安全等方向。应用安全主要以Java/PHP/Go等语言开发的业务应用。供应链安全包括采购部署的各类开源/商业的三方应用或者服务,甚至这些应用所依赖的中间件、组件。移动端安全主要保障在Android和iOS上的App,以及在微信/支付宝等平台上的小程序,主要围绕程序保护(逆向、混淆、虚拟机等)、端环境与风险识别(应用、设备、行为等维度信息分析、设备ID、设备指纹等)、安全组件(包括滑块/投篮/选图/无痕验证码、安全键盘、安全签名验签、安全储存、安全Webview容器、加解密、恶意软件识别、钓鱼链接识别、诈骗电话/短信识别等)、端安全对抗(攻击行为采集、HotPatch等)、端代码安全扫描(包括合规扫描、漏洞扫描等)。IoT安全主要保障各类软件和硬件结合的产品,主要解决传感器安全、通用固件提取与修改、测信道、无线网络攻防、入侵检测、FIDO以及特定场景(比如工业设备、汽车等安全)。Web3以及AI安全等为近些年新出现的场景。
应用安全的建设一般分为安全能力建设岗位与安全运营岗位,安全能力建设偏向开发方向,包括建设黑白灰盒(IAST/DAST/SAST/MAST)、安全组件、SDL平台、安全资产平台、应用安全防护能力(RASP等)、漏洞管理平台等。安全运营岗位偏向机制建设与运营,包括建设应用安全流程、规范、机制建设(涵盖安全意识提升、安全策略运营、安全风险治理等等工作)。当进一步深入建设后,还会衍生出通用程序分析、漏洞扫描与挖掘、各类环境模拟等基础安全研究方向岗位。

应用安全主要工作内容
安全运营
安全理念
★★★☆☆如何理解安全左移?
略
★★★☆☆如何系统地制定漏洞相关指标?
★★★☆☆SDL和DevSecOps有何差异?
略
安全意识
略
安全规范
★★★☆☆ 安全规范的意义是什么?
避免持续不断的发现漏洞、应急漏洞,而是为了让不出现漏洞建立各种规范。就像是交通法规不是为了限制路权,是为了保障人身财产安全。安全规范绝不是消灭代码的创造性、优雅性,而是限制过度灵活,推行标准化,以一种共识去写代码,提升效率。
安全评估
★★★☆☆ 抽象来看,安全评估到底要评什么东西?
略
★★★☆☆ 安全评估与渗透测试有什么区别?
略
★★★☆☆ 互联网应用和办公后台应用的风险区别有哪些?
略
★★★☆☆ 密码如何加密保存?
使用高强度的不可逆的Hash算法,且加动态盐。具体成型算法可以使用pbkdf2、bcrypt、scrypt等。
★★★☆☆ 某些场景(登录、注册、修改密码、支付)会存在哪些风险以及如何防范?
略
★★★☆☆ 哪些方法可以防止爆破?
增加密码复杂性;限制单机/IP请求次数;增加人机识别验证;
★★★☆☆ 新应用如何评估安全风险?
略
★★★☆☆ 需求阶段、系分阶段安全评估的侧重点是什么?
略
★★★☆☆ 接口B的参数是从接口A的响应中获取的,会存在什么风险?
略
★★★☆☆ 金融业务有何特色?
略
★★★☆☆ 如何让业务方主动找你评估?
略
★★★☆☆ 如何判断评估覆盖范围的优先级?
略
★★★☆☆ 如何降低各人检验导致评估不一致?
略
★★★☆☆ 如何系统提高安全评估效率?
略
★★★☆☆ 安全评估和人工测试以及自动化测试三者差异是什么?
略
★★★☆☆ 算法模型的安全风险如何评估?
略
★★★☆☆ 安全评估的行业最佳实践是什么?
略
★★★☆☆ 如何看待未来安全评估的趋势?
略
安全解决方案
★★☆☆☆ 如何规避绕口令带来的风险?
略
★★★☆☆ 硬编码密钥有何风险以及如何系统解决?
密钥暴露面越多,风险越大:密钥硬编码在代码中导致的直接结果就是代码在哪里,密钥就在哪里。研发人员电脑上存在密钥,如果电脑被攻击则密钥也会被泄漏。其次,研发人员可能因为安全意识不足,将代码上传至各类私有云盘、家里电脑或 U 盘中,导致风险面增大。更有甚者,会将代码上传至 GitHub,而忽略其中的硬编码密钥,从而被恶意利用。攻击者拿到硬编码密钥后攻击成本较低:攻击者无论通过什么方式拿到你代码,首先就会去看硬编码密钥部分,尝试利用这些代码中的明文密钥。比如存在邮箱密码,则会尝试登录你的邮箱,进一步渗透并挖掘邮件中有价值的内容;有 FTP 账号密码,则会尝试连接 FTP,挖掘其中有价值的文件。硬编码意味着你不会去变更它:当密钥硬编码在代码中时,改动密钥的成本就会增大,每次改动密钥时你需要额外进行应用发布和测试。而密钥的安全策略中,定期更换是最重要的因素,因为你无法知道在何时何处密钥泄漏过,因此定期更换密钥能降低风险。解决方案:核心点在于密钥需要和代码分离,尽可能少地让密钥被人接触到。
★★★★☆ 0day漏洞如何防御
略
★★★☆☆ GitHub等三方泄漏敏感信息如何体系防御
略
★★★★☆ 业务逻辑漏洞如何通过技术手段避免写出来?
略
★★★★☆ 软件供应链后门和漏洞如何系统规避
略
★★★★☆ 为什么Session ID要和设备关联绑定?
Session ID的目的是为了识别【当前会话】,原则上当前会话发送改变,则销毁该会话。大部分平台的真实情况是session id可以跨平台使用,在业务场景中是方便。但在安全角度有风险。 场景:如果APP端的Session ID被盗取,攻击者拿着该Session ID来请求即可拥有你的身份。在PC端最常见的就是通过XSS拿Token,替换后拿到你的账户权限(比如腾讯的Session ID就是和UserAgent等信息绑定的,盗取来无法直接使用的)。 作用:若Session ID和设备ID绑定后,SessionID被盗取后将无法直接使用,增加攻击成本。
★★★★☆ 为什么要求小程序的Session ID不能在其他平台上使用?
场景:攻击者盗取了你的Session ID后,由于微信通信是双向加密的,无法模拟请求,攻击者则可以将小程序的Session ID替换到PC端,从而拥有你PC的账户权限来进行攻击。 场景:比如支付功能在PC上有验证码,而在APP端无验证码,那攻击者就可以通过盗取PC的Session ID填充到移动端进行支付了。 作用:同平台的Session ID都应该失效,跨平台更应该失效掉,同样也是为了增加攻击成本。
渗透测试
漏洞是应用安全岗位从业基础,挑选两到四个不同方向常见和不常见的漏洞,就漏洞原理、利用方式和修复方案进行提问,然后根据回答的情况进行详细深入的二次提问。
★★☆☆☆甲方渗透测试和乙方渗透测试有何差异?
略
★★★★☆ 哪些漏洞的测试对业务有损?如何避免?
略
★★★★☆ 你之前没接触区块链/云原生/算法安全,现在需要评估某个使用该技术的业务安全性,你会如何做?
略
常规漏洞
★★☆☆☆ Redis未授权访问漏洞有哪些利用方式?
写Crontab、写公钥、写webshell等。
★★★☆☆ SSRF利用方式及修复方案?Java和PHP的SSRF区别?
略
★★★☆☆ JSONP的业务意义,如何设计落地一个CSRF Token?
JSONP在利用时可通过Meta标签去掉Referer,因此在修复时需要主意Referer为空情况;
★★☆☆☆ CORS原理、利用及修复?
略
★☆☆☆☆ CRLF注入原理?
略
★★☆☆☆ URL白名单如何绕过?
略
★★★★☆ Fastjson、Log4j常见漏洞原理?如何彻底解决该漏洞?
原理略;彻底解决该漏洞可以分析根因,Fastjson主要因为Autotype导致的、Log4j主要因为Lookup,可考虑移除经常出现问题的代码,制作内部精简定制版本。或者通过应用运行时防护(RASP)。
业务逻辑漏洞
★★☆☆☆ 业务逻辑漏洞有哪些具体类型?
考察对业务逻辑的理解,如果只局限在越权则比较浅。凡是和业务比较贴近的漏洞都算业务逻辑漏洞,比如身份校验相关的风险(未授权访问、非正常账户态、身份可枚举、水平越权、垂直越权等)、接口逻辑实现不一致(不同协议实现不一致、同类产品不同逻辑、不同阶段逻辑不一致-流程绕过)、不安全的可信端数据(APP数据)、预设要求不符合(依赖条件不安全-业务校验属性设计、人工客服容易被骗-业务流程设计)、滥用合理业务需求等等。
★★☆☆☆ 哪些账户状态会导致预期外的风险?
此题考的是当账户状态改变时,由于各个业务逻辑并不一定严格遵循该账户状态的要求导致的还可以继续进行一些预期外的操作。一般账户状态在注销、禁用、风控、司法冻结等时候,会出现该问题。
★★☆☆☆ 身份标识明文传输会导致什么风险?
伪造他人身份态。
★★☆☆☆ 水平越权触发点会存在哪些位置?
Cookies、自定义Header、URL Path、URL Param Value、URL Param JSON、Body Form、Body JSON、Body XML、自定义协议的自定义字段等等。
★★★☆☆ 水平越权有哪几种检测方式?
一般针对数字类型的越权可以通过递增枚举数字,根据响应情况可以判断是否存在越权。此外还可以通过两个账号相互访问对方创建的资源来判断,可避免不连续的数字导致的遗漏。
★★★★☆ 通过数字加减遍历或通过两个账号互测的方式进行水平越权测试有何优劣势?
数字加减遍历只能针对数字类型资源ID,且只能针对连续的数字,遗漏情况较多,且对业务有损(会导致操作或查询他人数据)。通过两个账号的方式,可以不用遍历,不容易被发现,也不会遗漏,对他人数据无影响。当然,在某些场景下,数字加减遍历方式相较于换账号方式更有优势。比如在多个参数的接口中,有N个参数是有校验和当前账号关系,但有一个参数未校验。此时用换账号的方式就得将多个账号都调整为正确参数后再测试问题参数。而+-方式则可以直接测试每一个参数。
★★★★☆ 某个APP的某个功能按钮是灰色不可用状态,如何绕过其限制?
除了修改按钮属性使其可用或分析灰色功能对应的后端接口,直接调用接口外。如果能考虑到不同协议的实现可能不一致就更加全面了,比如APP上不能用,PC上是否就能用了,PC也不能用,通过各种协议(HTTP、WSDL、REST、GraphQL)的API调用是否能绕过。
★★★★☆ 流程绕过漏洞如何抽象理解归类?
流程绕过漏洞可以理解为不同阶段逻辑实现不一致,比如创建和后续状态变更时的要求不一致(一个操作创建时权限校验很严格,结果修改的时候的权限要求却不一致)、一个流程某个步骤的要求不一致(第一步要输入密码,结果第二部下单的时候并未强校验前面输密码是否完成)、并发逻辑控制(开多窗口同时支付,使一个优惠多次使用)、特殊时期的逻辑绕过(大促时期的校验机制降级)等等。
★★★★★ 如何通过技术手段杜绝(非缓解)水平越权漏洞?
略
API安全
★★★☆☆建设一个API网关,如何系统解决未授权访问、请求篡改、重放等风险?
传输窃取->HTTPS;未授权访问->API调用密钥;请求篡改->请求签名;请求重放->加随机数的请求签名;
★★★★☆ 设计API签名时,拼接各个参数值时为什么要排序?以及为什么要增加分隔符?
排序的目的是为了签名时和验证签名时数据排列是一致的,避免因为参数顺序问题导致签名不正确。分隔符是为了避免各个参数值不一致(比如a=123&b=456和a=1&b=23456),但签名还能一致的情况。
★★★★☆ 设计API签名时,随机数使用秒时间戳(timestamp/s)会存在什么风险?
秒时间戳在防重放攻击时,会存在一秒内可重发多次问题,可增加一个随机数或使用毫秒随机数。
★★★★☆ 设计API签名时,HMAC SHA256和SHA256区别是什么?
SHA256 无密钥,攻击者可离线构造彩虹表反查原文,篡改数据后也能自行重算摘要(无法防伪造)。HMAC SHA256 引入了密钥,没有密钥就无法伪造出合法签名,可有效防篡改与重放。
★★★★☆ 一个接口入参中存在传入邮箱,有可能存在什么风险?
由于底层的邮箱系统往往都支持多邮箱语法,传入多个邮箱 mail1@feei.cn;mail2@wufeifei.com,可以绕过业务侧限制。
协议漏洞
★★☆☆☆ HTTPS交互过程?
- (OUT)ClientHello(Random+可接受的SSL版本及加密算法)。2. (IN)ServerHello(SSL版本+加密算法);(IN)Certificate(包括Server Public Key,CA Sign,Domain);ServerKeyExchange(若选择RSA加密则无此步骤,若为DHE/ECDHE,则会协商密钥而非传输密钥);ServerHelloDone;3. ClientKeyExchange(使用CA公钥验证服务端证书是否合法,通过后计算Pre-Master Key,使用服务端证书对Pre-Master Key加密后传输给服务端。服务端收到后使用自己私钥解密得到Pre-Master Key,通过Pre-Master Key生成Master Key,最终生成对称密钥)。4. ChangeCipherSpec(通知服务端,客户端进入加密模式),客户端对Client Finished加密后发送给服务端。5. ChangeCipherSpec(服务端收到消息后使用Master Key解密,成功通知客户端,服务端也进入加密模式),也会给客户端发送一个Server Finished消息,如果客户端能成功解密,双方密钥协商已全部完成。之后即可将数据使用对称密钥加密后传输。
★★★☆☆ HTTPS交互过程中为什么不直接使用Pre-Master Key而要再生成一个Master Key?
不同的KeyExchange方式生成的Pre-Master Key长度不一样;增强随机强度;
★★★☆☆ HTTPS握手过程是在HTTP之前的,如果一个IP上有多个域名,此时该返回哪个域名的证书?
SNI(Server Name Indiction)。
★★★★☆ 基于HTTPS交互逻辑,如何实现让类似Burp等工具无法抓某个域名的包?
略
★★☆☆☆ CA到底解决了什么安全问题?
当网络被控制后,公私钥在传输过程中是可能被替换的。因此需要有一个第三方知名机构来进行认证担保。将公钥以及域名等信息交给CA,CA通过域名Whois管理员邮箱验证(DV证书)、邓白氏查询公司电话验证(OV证书)、金融机构开户许可证验证(EV证书,地址栏可看到公司名)真实归属情况,验证成功后CA使用自己的私钥进行数字签名生成证书。因大家认可这个CA,它的证书被很多操作系统和浏览器内置了,当其他人收到该证书后,即可通过系统和浏览器内置证书里的公钥去解密。
★★★★☆ 如果CA本身被攻击或有内鬼,签发了某个域名的证书如何解决?
(1)HPKP(类似HSTS机制,在用户首次访问域名的时候,增加Response Header,告知浏览器正确域名证书签名信息,之后如果遇到别的证书签名则拒绝访问或上报)。(2)证书透明度(Certificate Transparency),要求CA将颁发过的域名证书全部公开,通过检索看是否存在未授权情况下颁发我们域名的情况。
★★★☆☆ 什么场景下HSTS会失效?如何解决该风险?
首次以HTTP访问的时候;HSTS过期后的首次访问;申请域名加入HSTS Preload List。
★★★☆☆ TLS1.2协议交互过程以及攻击方法?
略
★★★☆☆ HTTP请求走私(HTTP Request Smuggling)原理
通过Content-Length对HTTP请求体的分割;
★★☆☆☆ DNSSEC能解决什么场景问题?
略
★★☆☆☆ CDN场景下的HTTPS证书安全如何保障?
CDN本质上就是中间人。因此,(1)将子域名证书交给CDN厂商,或(2)授权CDN厂商申请证书(推荐)。(3)使用四层TCP加速,还是由源站来存证书(对于安全会存在取用户原始IP的问题,常见方式通过再TCP Option增加一个变量,再TCP Header添加用户的IP地址,常见实现比如TOA,存在IP伪造的可能)。(4)使用Keyless方案,将TLS握手过程进行拆分,将需要使用私钥进行解密的部分移到后端特定服务器,实现证书和私钥物理隔离(最优)。
★★☆☆☆ DNS中(DS、PTR、TXT选其一)记录类型的常用作什么场景?
DS:DNSSEC 委托链中存放子区 DNSKEY 的摘要,用于校验子域签名的可信;PTR:常用于邮件服务器的黑名单判定,邮件服务器每天接收大量来自不同IP的邮件,如不加判断就接收会导致存在大量的垃圾邮件。通过查询发送方IP的PTR记录可以看该IP是否有绑定域名,从而拒收未绑定域名的IP发送的邮件。;TXT:对域名进行标识和说明,用于SPF可反垃圾,也可用于搜索引擎判定域名归属。
★★★☆☆ 将暂时不用的域名解析到1.1.1.1有什么好处和坏处?
好处:使用时更改解析记录即可,不用新增解析记录,全网同步速度会更快一些;坏处:1.1.1.1是某CDN的IP,可导致站点被恶意接管风险;
★★★☆☆ OAuth除了最常见的redirect_uri绕过问题外,还有哪些风险以及如何修复?
风险:state 没有设置、没有验证、可多次使用或被设置成其他功能;授权码可多次使用或无时间限制;授权了更多权限;Client Secret 泄漏;绑定三方登录时,攻击者通过他人邮箱注册账号,而此时还未验证邮箱有效性(1. 邮箱所有者通过邮箱注册时,验证邮件会使攻击者注册的账号邮箱绑定成功。2. 邮箱所有者通过三方账号注册时需要绑定邮箱,此时会和攻击者之前的账号绑定成功)。攻击者控制某个账号时,偷偷将账号绑上某个第三方账号,无论账号如何改密码,都可以通过三方账号登录并控制该账户;修复:验证 redirect_uri;access token 仅能使用一次;避免读取当前用户的 session 直接绑定;state 使用随机 hash,并在服务端校验;全程使用 HTTPS;平台中可给用户发送消息的地方加强域名过滤;
★★★☆☆ JWT相较于SESSION优劣势?
略
★★★☆☆ 如何通过 HTTP 参数污染将 uid=9527&amount=100 中的 uid 改为 10086?
略
★★★★★ 当网关对所有请求会进行一次强制 urldecode,存在一个参数为 uid=9527&remark=充话费&amount=100 的接口,仅备注字段(remark)可控时,如何改变最终的金额字段(amount)?
略
★★★☆☆ Web缓存投毒的原理、利用和修复?
攻击者向Web应用发起错误格式的请求,致使Web应用无法处理该请求(Status Code 400、501),同时该请求被缓存了,导致其他浏览该Web页面时是从缓存系统中获取的错误响应信息,使正常用户无法使用功能。一般使用利用过程中,可先找到未被编入cache key的header,然后可通过Web缓存和Web Server间的差异来让Web Server异常。比如通过设置超大头、头中增加换行回车等控制字符、通过在GET请求中增加Method Header(X-HTTP-Method-Override、X-HTTP-Method、X-Method-Override)。正常修复可在缓存中将3xx、4xx、5xx的缓存时间设置为0,或修改业务代码将异常请求增加HeaderCache-Control: no-store。
★★★★☆ Web缓存投毒中,针对200的状态错误如何彻底修复?
略
业务风险
★★☆☆☆ 有哪些常见的业务风险?
赌博、色情、暗雷、欺诈、非法投资、洗钱、仿冒、刷单等。
算法安全
加解密
★☆☆☆☆常见加解密分类和算法有哪些?
对称算法,AES/DES,SM4;非对称算法,RSA、ECDH、ECDSA,SM2;消息摘要算法,SHA256、MD5,SM3;传输层安全协议,TLS、SSL,TLS1.3+国密单证书;国密证书,sha*WithRsaEncryption,SM2-with-SM3;
★★☆☆☆哪些Hash和加密算法不建议使用?
不安全:DES、RC4、MD5。不够安全:3DES。另外AES、RSA秘钥长度对安全性影响也较大。
★★★☆☆ 对称加密的块式加密和流式加密相同与不同点?
基本思想都是对信息进行异或、移位等操作进行加密。块式加密是把数据分成多个固定长度的组,每组多个字节,每次针对一组字节操作,典型算法包括AES和DES。流式加密是每次只针对一个字节进行操作,典型算法包括RC4。
★★★☆☆ DES的回放攻击如何实现的?以及如何解决?
DES对于同一个block,如果使用同一个密钥,加密出来的结果是相同的,即可通过寻找同样密文block来推导出原文。可通过CBC(Cipher Block Chaining)来解决,每次加密一个block后,将它和前一个block的密文进行异或操作,作为这个block的密文,即使有同样的block,每次加密的结果也会不一样,也就无法通过密文推到明文。其中,由于第一个block之前没有其它block,需要生成一个随机64bit的初始向量给第一个block进行异或操作。
★★★☆☆ 3DES相较于DES差异?
主要是扩充了密钥长度,是 DES 的三倍,加密和解密时会进行三次。也能解决回放攻击。
★★★☆☆ 3DES、AES、RSA之间的优劣势?
安全性、加密速度、密钥传输保存、被加密的数据长度等角度展开。 AES和3DES为对称加密算法,AES相较于3DES要快很多。RSA相较于AES,数据长度有限制、性能非常低,但公钥可公开。一般使用对称加密算法加密数据,再用RSA取传输对称加密密钥。
★★★☆☆ 有什么算法可以解决RSA私钥可能泄露的问题?
DH(Diffie-Hellman)。
★★★☆☆ 如何增强DH,使得更短的密钥实现更安全的密钥交换?
ECDHE(ECC+DH)。
★★★☆☆ 签名和验签的实现?
rsa_encrypt(hash(origin_data), private_key), rsa_decrypt(sign_data, public_key) == hash(origin_data)
★★★★☆ 有哪些可能的绕过签名方式?
供应链安全
★★★☆☆引入三方商业软件,部署时如何进行安全防护?
略
★★★☆☆ mvn源的安全性需要考虑哪些点?
略
★★★☆☆如何识别依赖的三方组件(jar/pip/npm包)的后门、投毒?
略
安全扫描器
IAST
★★★☆☆ 灰盒相较于黑白盒的优势是什么?
略
哪个安全Hook点在常见业务场景中对性能影响最大?
略
SAST
★★★☆☆ 当前阶段,人工和自动化的代码审计差异点在哪里?
略
★★★☆☆ 什么类型漏洞是代码审计无法准确判断存在与否的?
强依赖运行时上下文和业务语义的漏洞,源码层面无法确定。比如越权和逻辑漏洞(是否成立取决于权限校验时的真实数据)、依赖外部配置或部署环境的漏洞、需要动态数据流在运行期才汇聚的注入等。
★★★☆☆ 密钥的识别的正则如何写?
核心思路是"关键字 + 赋值符 + 高熵字符串",例如 (?i)(secret|password|token|api[_-]?key|access[_-]?key)\s*[:=]\s*['"][A-Za-z0-9/+=]{16,}['"],再结合字符串熵值评估与白名单过滤误报。
★★★☆☆ 正则 (a+)+ 会存在什么风险?
会导致 ReDoS。
★★★☆☆ 程序对读取的文件名的正则为 /\.markdown/,如何绕过?
略
★★★☆☆ 程序对请求的 URL 的正则为 /^http\:\/\/.*\.feei.cn($|(\/[^<>\'\"]*))/,如何绕过?
略
★★★☆☆ 解释型语言和编译型语言在语法树分析上有什么差异?
略
★★★☆☆ Java Web应用中的反序列化漏洞的Source和Sink是什么?
略
DAST
★★★☆☆ 黑盒如何检测XSS漏洞?
略
★★☆☆☆ 甲方黑盒是否应该有爬取流量功能?
略
★★★☆☆ 黑盒如何扫描无法出网的SSRF?
略
★★★☆☆ 黑盒如何扫描越权漏洞?
略
★★★★☆ 黑盒带登录态扫描如何规避业务影响?
略
★★★★☆ 黑盒扫描时如何避免被反制?
略
漏洞处置
漏洞管理
★☆☆☆☆ 漏洞修复一般分为哪几个步骤?
略
★★☆☆☆ 如何制定漏洞的修复时间?需要考虑哪些因素?
略
★★★☆☆ 如何有效提升漏洞修复效率?
略
★★☆☆☆ 漏洞复盘的关键是什么?
略
★★★☆☆ 如何快速有效推进修复外部厂商的漏洞?
略
★★★★☆ 外部白帽子发现某个高危漏洞,但完整修复需要多天,安全产品的止血手段不彻底,你该如何处置?
略
其它应用类型
前端/移动端安全
★★☆☆☆ 如何发现网页被劫持了?
(1)CSP;(2)Javascriptperformance.getEntries()ordocument.addEventListener('load',e => { console.log(e.target.src) }, true);
★★☆☆☆ 如何不通过iTunes控制iOS?
libmobiledevice 是一个开源的软件库,它提供了与苹果的iOS设备(如iPhone、iPad和iPod Touch)进行通信的工具和接口。该库允许开发者在没有使用苹果官方iTunes软件的情况下,通过USB或Wi-Fi与设备进行交互。使用 libmobiledevice 库,开发者可以实现诸如安装和卸载应用、备份、恢复、获取设备信息、管理文件系统、模拟用户操作等多种功能。该库支持多种编程语言,且可以在多个操作系统上运行,包括Linux、Windows和macOS,使得各平台的开发者都能够使用这些工具。libmobiledevice 是基于非官方的逆向工程工作,而不是基于苹果提供的官方API或工具。因此,使用该库开发的工具可能需要随着苹果系统的更新而不断更新,以保证兼容性。
★★☆☆☆ iOS取证工具
MVT(Mobile Verification Toolkit),通过分析iOS备份文件或越狱的文件系统,可以拿到iOS所有敏感数据。
★★☆☆☆ 前端Javascript代码如何混淆以及反调试?
脚本压缩:去除有意义的信息;重命名变量/属性;移除无用代码;对抗手法:格式化;分析全局变量/JS属性/DOM属性;分析常量;
加壳:加代码编码,运行时解码后eval;对抗手法:eval换成alert/console;使用其它eval能力(Function/(function(){}).constructor;setTimeout/setInterval(“code”); (‘constructor’, …))、监控元素(MutationEvent / MutationObserver);在打印eval的时候,检查eval是否运行;
混淆:语法树、控制流、虚拟机;打乱原有代码逻辑、注入扰乱代码、修改变量名称、增加随机种子、字符串用RC4加密、字符串转换为unicode等;
反调试:禁用开发者工具:若打开开发者工具将禁止调试功能;禁用console:禁止使用console.*来调试变量;通过算法执行时间判断debugger是否打开;域名白名单:只允许在特定域名下允许运行代码;自我防护机制:当代码变动后将停止运行。通过toString检测代码是否被篡改;是否在特殊浏览器(PhantomJS、WebDriver)中运行;检测到异常后不立即响应;
★★★☆☆ 如何实现当前页面location.href改变后,仍然能执行之前页面的JavaScript?
- setTimeout方法不在 JavaScript 的规范中,大多数运行环境都有内建的调度程序来支持这个方法,可以支持当前页面发生跳转后还能执行之前的JavaScript。2. 另外onunload方法也可以在location.href跳转后执行Javascript。
★★★☆☆ APK反编译有哪几种路径,代表工具有哪些?
dex->class/jar->java dev->class/jar:Enjarify、dex2jar、classyshark、jadx等 class/jar->java:jd-gui、CFR、Procyon等 dex->smali->java dex->smali:ApkTool smali->java:smali2java
★★★☆☆ App自检升级场景下会存在哪些风险?
略
★★★☆☆ 如何设计一套通信机制,能够保证传输过程中的完整性、不可抵赖性以及防止重放?
略
★★★☆☆ 如何进行实体检测?
略
★★★☆☆ 常见的调试方法和检测方法?
略
★★★☆☆ 如何防止Frida、Xposed等注入攻击?
略
★★★☆☆ 如何防止当前设备的数据拷贝到其他设备?
略
★★★☆☆ 外挂有几种类型的实现方式?
略
★★★★☆ 如何避免未经用户授权获取权限?
略
★★☆☆☆ 静态apk反编译对抗有哪些手法?
修改MagicNumber固定值,使反编译工具无法识别AndroidManifest文件,导致反编译失败。可通过pxb.android.axml.AxmlReader修改为正确的magicnumber; 修改StringChunk结构。可通过pxb.android.StringItems修正stringCount;
★★★☆☆ 静态特征码对抗方式?
通过加固使敏感函数/指令变化;通过混淆使字符串、函数、代码路径、资源路径变化;通过自动化打包使包名、证书、应用名、服务端地址均变化; 但通常AndroidManifest.xml(权限/结构)、assets/、lib/内容变化不大,可作为特征。