许多应用程序允许用户上传数据信息。我们通常验证文本的安全性和合法性,但是接受文件上传可能引入更多的风险。为了减轻风险,我们可能只接受特定扩展名的文件,但是攻击者可能在将恶意代码嵌入文件中。测试恶意文件确保应用程序/系统能够正确阻止攻击者上传恶意文件。
恶意文件上传的相关漏洞独特之处在于“恶意”文件能够轻易在在业务逻辑层被拒绝,在上传过程阶段进行文件扫描,拒绝那些扫描结果为恶意的文件。此外,不同于上传非预期文件的是,上传的文件类型是合法,可以接受的的,但其内容可能对系统存在恶意影响。
最后,“恶意”对于不同的系统可能存在不同的解释,例如,利用SQL服务器漏洞的恶意文件可能在静态文件框架环境下不认为是“恶意”的。
应用程序可能允许上传包含漏洞利用程序或shellcode的恶意文件,并且不会对他们进行文件扫描。恶意文件也可能在应用程序架构的不同地方被检测出来,如IPS/IDS,服务器反病毒软件或者自动化过程的反病毒扫描程序。
假设一个图片分享应用允许用户上传.gif或.jpg图形文件。万一攻击者能够上传一个PHP shell或者exe文件或者病毒会如何?攻击者上传的文件可能存储在系统某处,病毒可能通过自身或远程执行扩散,或者shell代码被执行。
除了使用黑白名单的防护措施,使用“Content-Type”头,或使用文件类型识别程序可能不总是足以对抗这类漏洞。每个从用户接受文件的应用程序必须含有验证上传文件是否含有恶意代码的机制。上传文件不应该存储在用户或者攻击者能够直接访问的位置。