安全无止界

应用安全面试题目

应用安全往往是各家企业都有配置资源建设,且往往都是重要方向。应用安全的建设一般分为安全能力建设岗位与安全运营岗位,安全能力建设偏向开发方向,包括建设黑白灰盒、SDL平台、安全资产平台、应用安全防护能力等。安全运营岗位偏向机制建设与运营,包括建设应用安全流程、规范、机制建设。当进一步深入建设后,还会衍生出供应链安全、安全研究等方向岗位。

应用安全主要工作内容
应用安全主要工作内容

漏洞挖掘、利用及修复

漏洞是应用安全岗位从业基础,挑选两到四个不同方向常见和不常见的漏洞,就漏洞原理、利用方式和修复方案进行提问,然后根据回答的情况进行详细深入的二次提问。

常规应用漏洞

  • ★★☆☆☆ Redis未授权访问漏洞有哪些利用方式?

提示:写Crontab、写公钥、写webshell等。

  • ★★★☆☆ SSRF漏洞原理、利用方式及修复方案?Java和PHP的SSRF区别?
  • ★☆☆☆☆ 宽字节注入漏洞原理、利用方式及修复方案?
  • ★★★☆☆ 简述JSONP的业务意义,JSONP劫持利用方式及修复方案?如何设计落地一个CSRF Token?

提示:JSONP在利用时可通过Meta标签去掉Referer,因此在修复时需要主意Referer为空情况;

  • ★★☆☆☆ CORS原理、利用及修复?
  • ★☆☆☆☆ CRLF注入原理?
  • ★★☆☆☆ URL白名单如何绕过?
  • ★★★☆☆ XSS持久化如何实现?
  • ★★★★☆ 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调用是否能绕过。

  • ★★★★☆ 流程绕过漏洞如何抽象理解归类?

提示:流程绕过漏洞可以理解为不同阶段逻辑实现不一致,比如创建和后续状态变更时的要求不一致(一个操作创建时权限校验很严格,结果修改的时候的权限要求却不一致)、一个流程某个步骤的要求不一致(第一步要输入密码,结果第二部下单的时候并未强校验前面输密码是否完成)、并发逻辑控制(开多窗口同时支付,使一个优惠多次使用)、特殊时期的逻辑绕过(大促时期的校验机制降级)等等。

常用协议漏洞

  • ★★★☆☆ TLS1.2协议交互过程以及攻击方法?
  • ★★★☆☆ HTTP请求走私(HTTP Request Smuggling)原理

提示:通过Content-Length对HTTP请求体的分割;

  • ★★☆☆☆ DNSSEC能解决什么场景问题?
  • ★★☆☆☆ DNS中(DS、PTR、TXT选其一)记录类型的常用作什么场景?

提示:DR:DNSSEC可用于确定源域名的数字签名;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,或修改业务代码将异常请求增加Header Cache-Control: no-store

  • ★★★★☆ Web缓存投毒中,针对200的状态错误如何彻底修复?

漏洞测试软性能力

  • ★★★★☆ 哪些漏洞的测试对业务有损?如何避免?
  • ★★★★☆ 你之前没接触区块链/云原生/算法安全,现在需要你评估某个使用该技术的业务安全性,你会如何做?

漏洞处置

  • ★☆☆☆☆ 漏洞修复一般分为哪几个步骤?
  • ★★☆☆☆ 如何制定漏洞的修复时间?需要考虑哪些因素?
  • ★★★☆☆ 如何有效提升漏洞修复效率?
  • ★★☆☆☆ 漏洞复盘的关键是什么?
  • ★★★☆☆ 如何快速有效推进修复外部厂商的漏洞?
  • ★★★★☆ 外部白帽子发现某个高危漏洞,但完整修复需要多天,安全产品的止血手段不彻底,你该如何处置?

漏洞自动化发现

白盒SAST

  • ★★★☆☆ 当前阶段,人工和自动化的代码审计差异点在哪里?
  • ★★★☆☆ 什么类型漏洞是代码审计无法准确判断存在与否的?
  • ★★★☆☆ 密钥的识别的正则如何写?
  • ★★★☆☆ 正则(a+)+会存在什么风险?

提示:会导致ReDoS。

  • ★★★☆☆ 程序对读取的文件名的正则为/\.markdown/,如何绕过?
  • ★★★☆☆ 程序对请求的URL的正则为/^http\:\/\/.*\.feei.cn($|(\/[^<>\'\"]*))/,如何绕过?
  • ★★★☆☆ 解释型语言和编译型语言在语法树分析上有什么差异?
  • ★★★☆☆ Java Web应用中的反序列化漏洞的Source和Sink是什么?

黑盒DAST

  • ★★★☆☆ 黑盒如何检测XSS漏洞?
  • ★★☆☆☆ 甲方黑盒是否应该有爬取流量功能?
  • ★★★☆☆ 黑盒如何扫描无法出网的SSRF?
  • ★★★☆☆ 黑盒如何扫描越权漏洞?
  • ★★★★☆ 黑盒带登录态扫描如何规避业务影响?
  • ★★★★☆ 黑盒扫描时如何避免被反制?

灰盒IAST

  • ★★★☆☆ 灰盒相较于黑白盒的优势是什么?

安全评估与解决方案

安全评估

  • ★★★☆☆ 抽象来看,安全评估到底要评什么东西?
  • ★★★☆☆ 安全评估与渗透测试有什么区别?
  • ★★★☆☆ 互联网应用和办公后台应用的风险区别有哪些?
  • ★★★☆☆ 一个应用开放出去API,可能存在哪些风险以及如何应对?

提示:传输窃取->HTTPS;未授权访问->API调用密钥;请求篡改->请求签名;请求重放->加随机数的请求签名;

  • ★★★★☆ 设计API签名时,随机数使用秒时间戳(timestamp/s)会存在什么风险?

提示:秒时间戳在防重放攻击时,会存在一秒内可重发多次问题,可增加一个随机数或使用毫秒随机数。

  • ★★★★☆ 设计API签名时,HMAC SHA256和SHA256区别是什么?

提示:SHA256存在彩虹表碰撞问题,HMAC SHA256简单理解相当于加盐了。

  • ★★★☆☆ 密码如何加密保存?

提示:使用高强度的不可逆的Hash算法,且加动态盐。具体成型算法可以使用pbkdf2、bcrypt、scrypt等。

  • ★★★☆☆ 某些场景(登录、注册、修改密码、支付)会存在哪些风险以及如何防范?
  • ★★★☆☆ 哪些方法可以防止爆破?

提示:增加密码复杂性;限制单机/IP请求次数;增加人机识别验证;

  • ★★★☆☆ 新应用如何评估安全风险?
  • ★★★☆☆ 需求阶段、系分阶段安全评估的侧重点是什么?
  • ★★★☆☆ 接口B的参数是从接口A的响应中获取的,会存在什么风险?
  • ★★★☆☆ 新的API接口上线时,如何设计使其避免出现请求篡改和请求重放?
  • ★★★☆☆ Docker容器以及K8s有哪些风险?
  • ★★★☆☆ IPv6和IPv4安全差异?
  • ★★★☆☆ 三方引入的应用和自研应用评估差异有哪些?
  • ★★★☆☆ 金融业务有何特色?
  • ★★★☆☆ mvn源的安全性需要考虑哪些点?
  • ★★★☆☆ 如何让业务方主动找你评估?
  • ★★★☆☆ 如何判断评估覆盖范围的优先级?
  • ★★★☆☆ 如何降低各人检验导致评估不一致?
  • ★★★☆☆ 如何系统提高安全评估效率?
  • ★★★☆☆ 安全评估和人工测试以及自动化测试三者差异是什么?
  • ★★★☆☆ 算法模型的安全风险如何评估?
  • ★★★☆☆ 区块链安全风险主要有哪些?
  • ★★★☆☆ 如何理解安全左移?
  • ★★★☆☆ 安全评估的行业最佳实践是什么?
  • ★★★☆☆ 如何看待未来安全评估的趋势?

安全方案

  • ★★☆☆☆ 如何规避绕口令带来的风险?
  • ★★★☆☆ 硬编码密钥有何风险以及如何系统解决?

提示:密钥暴露面越多,风险越大:密钥硬编码在代码中导致的直接结果就是代码在哪里,密钥就在哪里。研发人员电脑上存在密钥,如果电脑被攻击则密钥也会被泄漏。其次研发人员会因为没有安全意识,将代码上传至各类私有云盘或家里电脑又或是U盘中,导致风险面增大。更有甚者,将代码上传至GitHub,而忽略了代码中的硬编码密钥,从而被恶意着利用;攻击者拿到硬编码密钥后攻击成本较低:攻击者无论通过什么方式拿到你代码,首先就会去看硬编码密钥部分,尝试去利用这些代码中的明文密钥,比如存在邮箱密码则会去尝试登陆你的邮箱进一步渗透挖掘邮件中有价值的内容,有FTP账号密码则会尝试连接FTP挖掘FTP Server中有价值的文件;硬编码意味着你不会去变更它:当密钥硬编码在代码中时,改动密钥的成本就会增大,每次改动密钥时你需要额外进行应用发布和测试。而密钥的安全策略中,定期更换是最重要的因素,因为你无法知道在何时何处密钥泄漏过,因此定期更换密钥能降低风险。解决方案核心点在于密钥需要和代码分离,尽可能少的让密钥被人接触到。

  • ★★★★☆ 0day漏洞如何防御
  • ★★★☆☆ GitHub等三方泄漏敏感信息如何体系防御
  • ★★★★☆ 业务逻辑漏洞如何通过技术手段避免写出来?
  • ★★★★☆ 软件供应链后门和漏洞如何系统规避

前端安全

  • ★★☆☆☆ 前端Javascript代码如何混淆以及反调试?

提示:

  • 混淆:打乱原有代码逻辑、注入扰乱代码、修改变量名称、增加随机种子、字符串用RC4加密、字符串转换为unicode等;
  • 反调试:禁用开发者工具:若打开开发者工具将禁止调试功能;禁用console:禁止使用console.*来调试变量;域名白名单:只允许在特定域名下允许运行代码;自我防护机制:当代码变动后将停止运行。
  • ★★★☆☆ 如何实现当前页面location.href改变后,仍然能执行之前页面的JavaScript?

提示:1. 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等注入攻击?
  • ★★★☆☆ 如何防止当前设备的数据拷贝到其他设备?
  • ★★★☆☆ 外挂有几种类型的实现方式?
  • ★★★★☆ 如何避免未经用户授权获取权限?
By Feei
安全无止界

最新内容

订阅本站最新内容

Loading