20189221 2018-2019-2 《密码与安全新技术专题》第一周作业
课程:《密码与安全新技术专题》
班级: 201892
姓名: 郭开世
学号:20189221
上课教师:谢四江
上课日期:2019年2月26日
必修/选修: 选修
1.本次讲座的学习总结
讲座主题:web安全与内容安全
学科背景:
随着信息技术的不断发展(通信→计算机→网络→网络化社会),网络安全技术一直在不断进步(斯巴达加密榜→密码技术、通信保密、内容篡改)。
典型攻击方式:
- 高等持续性攻击(APT):2010年6月震网(stuxnet)攻击⇒物理隔离是不安全的
- 第三方恶意代码注入:2015年9月Xcode Ghost⇒底层开发软件在编译过程攻击
- 上帝攻击模式(GPT):基于全球全网大数据能力对用户进行用户画像
威胁方-防护方的非对称性
- 攻防技术非对称
- 攻防成本非对称
- 攻防主体非对称
常见的Web漏洞:
- SQL注入:输入验证不足或Web应用程序中SQL语句构造不当
- 跨站脚本攻击漏洞
- cookie欺骗
- CSPF(跨站请求伪造)
- web信息泄露
- 权限问题
- 逻辑漏洞
- 第三方程序漏洞
- web服务器解析漏洞
- 弱口令
- SSRF
2.学习中遇到的问题及解决
- 问题1:对于SQL语言记忆模糊,对理解SQL注入攻击造成阻碍
- 问题1解决方案:查询本科时的学习课件,重新安装SQL server熟悉SQL语言。
3.本次讲座的学习感悟、思考等)
张健毅老师讲课节奏很好,声音很有磁性。之前本科时学习过一些web和数据库相关的课程,当时的课程主要是功能上的实现,对于安全方面确实没有进行很好的设计与考虑。既然已经进行安全、密码方面的研究生学习,在今后的课程设计、项目实现等具体工作是要时刻保持安全的思维。这学期我还选修了《网络攻防实践》,相信此次课程对于这门课也有很大的启发。
4.SQL Injection最新研究现状
因论文库的限制,我找的论文都是IEEE中的,具体信息见参考文献。
SQL注入攻击对数据库驱动的Web应用程序构成严重的安全威胁。这种攻击使攻击者可以轻松访问应用程序的底层数据库以及这些数据库包含的潜在敏感信息。黑客通过专门设计的输入,可以访问数据库的内容,否则无法这样做。这通常通过更改Web应用程序中使用的SQL语句来完成。
常见的SQL注入攻击:
重言式(tautology)
攻击者的意图是绕过身份验证并从Web应用程序数据库中提取信息。在这种类型的攻击中,黑客将代码注入一个或多个条件语句,以便这些语句的执行结果总是评估为真[6]。如果攻击成功,代码将显示所有返回的记录或执行某些操作,前提是至少返回一条记录。一般返回true的常用语句是1 = 1.这意味着通过在原始查询语句中附加“或1 = 1”,查询结果将始终为true。
非法/逻辑错误查询(illegal/logically incorrect queries)
攻击目的是识别可注射参数,执行数据库指纹打印以及提取机密数据。此类攻击基于编写生成错误消息的查询语句。拒绝查询时,将从数据库返回一条错误消息,其中包含有助于攻击者的有用调试信息。
联合查询(union query)
绕过身份验证过程并通过将union运算符插入到普通查询中来提取数据。
堆叠查询(Stacked Queries)
此攻击插入恶意SQL查询,这将导致在与数据库的一个连接中执行一系列SQL语句。如果运算符可以处理许多SQL查询; 在每个查询结束后添加。
例:SELECT * FROM users WHERE user name = admin AND password = 3333; DROP TABLE用户; - ;.
条件陈述
此攻击通过使用IF语句完成,有三种类型:基于时间,基于错误和基于内容。
例:http://www.vulnerable.com/goods。a?id = 34; if +(system user = sa)+ WAITFOR + DELA Y +0:0:10。
存储过程(stored procedures)
攻击者试图用恶意输入执行数据库中存在的存储过程
相关研究
常见的SQL检测与预防:
静态分析(Static Analysis)
静态分析是在到达执行阶段之前在系统源代码中找到弱点和恶意代码,主要是语言特定的。
静态分析缺点包括:
- 开发人员需要手动更改易受攻击的部分
- 无法识别存储过程攻击
- 其结构直到运行时才被指定
动态分析(Dynamic Analysis)
动态方法技术可用于分析由Web应用程序使用用户输入数据生成的动态或运行时SQL查询。
动态技术下在运行时生成的SQL注入检测方法,在将查询发布到数据库服务器之前执行查询,查询的异常性质导致它甚至不会传递到数据库执行。
动态分析的主要缺点是在运行时生成模型所涉及的开销。
组合方法(Combined Approach)
组合方法利用静态分析和动态分析方法的优势来检测和防止SQL注入。在静态阶段,识别热点,之后创建模型,指示可以在该热点处进行的所有有效查询。在运行时,将检查运行时查询以查看它们是否与其模型匹配。如果不是,则不会将查询发送到数据库以供执行。
sql注入披露和威慑的仿真
Padma N Joshi ; N. Ravishankar ; M. B. Raju ; N.CH. Ravi等提议开发一个用于身份验证访问的安全系统并应用SQL注入攻击来检查其安全性。换句话说,设想的系统不从文本框中获得任何狂野的字符。
算法设计如下:
- 用n生成异常模式获取用户生成的查询SPL []模式列表
- 设置I等于1并在I中增加1,直到它在此循环期间不等于n次重复和后续步骤
- 如果两者相同,则比较所有值查询长度和模式值,然后计算异常值
- 如果任何异常分数值异常大于或等于阈值,则查询将被拒绝
- 否则返回查询6:停止
通过删除SQL查询的参数值来检测SQL注入攻击
Rajashree A. Katole ; Swati S. Sherekar ; Vilas M. Thakare等介绍了保护Web应用程序免受SQL注入攻击的SQL注入检测机制。他们提出了使Web应用程序能够在丢失任何数据之前检测代码注入(SQL注入)攻击的新方法。该通过使用组合的静态和动态分析来检测注射攻击。参数值在动态即运行时从SQL查询中删除,并与固定或静态分析的SQL查询进行比较,即提前进行比较。
一种二阶SQL注入检测方法
陈平提出的方法基于ISR(指令集随机化)检测二阶SQL注入攻击。该方法随机化Web应用程序中包含的可信SQL关键字,以动态构建新的SQL指令集,并在DBMS之前添加代理服务器,代理检测收到的SQL指令是否包含标准SQL关键字以查找攻击行为。
该方法采用在Web服务器和数据库服务器之间构建代理服务器。代理服务器有两个主要功能,一个是检测SQL注入攻击,另一个是将无害指令去标准化为标准SQL语句并将其转发给DBMS。
使用SHA-1算法和语法感知防止SQL注入的新方法
Qais Temeiza ; Mohammad Temeiza ; Jamil Itmazi等提出了一种基于密码学和语法感知来防止SQL注入的新方法。
使用两种方法来防止SQL注入攻击:
- 嵌入式SQL语句的解决方案
使用了快速安全的SHA-l algorthim。这种方法是通过删除查询属性值,然后散列查询并将哈希值与先前生成和散列的普通查询哈希值进行比较。实现在使用散列机制的嵌入式查询中防止SQL注入。如果两个哈希值相同则执行SQL查询,如果不是SQL查询将被拒绝。
- 存储过程的解决方案
使用语法感知(在易受攻击的存储过程中阻止SQL注入)来通过搜索特定的SQL注入签名,shell命令以及可用于执行攻击的任何Unicode字符来阻止存储过程中的SQL注入攻击。
检测和预防SQL注入攻击的混合方法
Ahmad Ghafarian等在An emulation of sql injection disclosure and deterrence中提出了一种新的混合方法来检测和防止SQLIA,是静态和动态方法的结合。该方法包括三个阶段,即数据库设计,实现和公共网关接口(CGI)。
- 数据库设计阶段:扩充所有数据库表,以包含且仅包含美元符号等符号的记录。
- (CGI)阶段:提出了一种算法其任务是动态地处理和监视所有传入查询的执行。任何用户查询在被授予执行权之前都应该通过该算法,否则它将被拒绝。
- 第三阶段(数据库)使用该算法在收到的SQL查询和先前预期的SQL查询之间进行字符串匹配过程。此比较的结果将自动与预期的有效查询匹配。此比较过程的输出将确定是否存在任何类型的SQLIA,如果存在,则查询将被拒绝。
优点:
- 由于在查询时执行算法,因此程序员不需要进行防御性编程。这节省了大量的编程时间。
- 该算法只编写一次,并将针对每个Web应用程序查询执行。所以,没有开销。
- 它可以处理任何类型的查询正常或可能的SQLIA
- 该算法独立于平台,因此可以在不同的平台上使用,例如。NET,PHP等
- 没有数据输入限制。
缺点:
- 此方法仅防止重言式 SQL注入。
- 由于Table扩充,它有一些开销。
- 由于在数据库表上执行额外记录,它有开销。
参考资料
- An emulation of sql injection disclosure and deterrence
- Encountering SQL Injection in Web Applications
- Detection of SQL injection attacks by removing the parameter values of SQL query
- A second-order SQL injection detection method
- A novel method for preventing SQL injection using SHA-1 algorithm and syntax-awareness
- A hybrid method for detection and prevention of SQL injection attacks