当前位置: 首页 > 科技观察

听说你是程序员,能帮我盗个QQ号吗?

时间:2023-03-14 11:20:43 科技观察

听说你是程序员,能帮我盗个QQ吗?这个笑话估计很多朋友都看过,程序员被黑过无数次。图片来自Pexels在别人眼里,好像我们要会写木马,会翻墙,会修电脑,会找资源,但凡是和电脑相关的事情,我们都得会。笑话归笑话,言归正传,对于我们程序员来说,多多少少了解一些信息安全的技术知识是有好处的,不仅可以了解计算机和网络的一些底层原理,还可以反哺我们的开发工作,用安全思维编程减少了漏洞的发生。本文内容:-网络安全-SQL注入-XSS攻击-CSRF攻击-DDoS攻击-DNS劫持-TCP劫持-端口扫描技术-系统安全-堆栈溢出攻击-整数溢出攻击-空指针攻击-UseAfterFreeAttack-HOOK-提权-可信计算-密码学-对称加密&非对称加密-密钥交换技术-信息摘要算法-数据编码技术-多因素认证技术信息安全大致可以分为三大分支:网络安全系统安全密码学下面我将列出这三个领域中一些常用的黑客技术。有些技术是交叉的,所以我将它们归为主要类别。网络安全①SQL注入网络安全三大安全之首,大名鼎鼎的SQL注入。SQL注入攻击的核心是让Web服务器执行攻击者预期的SQL语句,从而获取数据库中感兴趣的数据或对数据库进行读、修改、删除、插入等操作,从而实现它的邪恶目的。以及如何让Web服务器执行攻击者的SQL语句呢?SQL注入的常规套路是将SQL语句放在表单或请求参数中,提交给后端服务器。如果将变量取出来进行数据库查询,就很容易上当受骗。比如一个根据用户ID获取用户信息的接口,后端的SQL语句一般是这样的:selectname,[...]fromt_userwhereid=$id其中$id为前端提交的用户id,如果前端请求是这样的:GETxx/userinfo?id=1%20or%201=1其中请求参数id转义后为1或者1=1,如果后端没有安全过滤直接提交数据库查询,SQL语句变为:selectname,[...]fromt_userwhereid=1or1=1其结果是找出user表中的所有数据,从而达到黑客泄露数据的目的。上面只是一个很简单的例子。在真正的SQL注入攻击中,参数构造和SQL语句要比这复杂得多,但原理是一样的。防御方法:检测输入,阻断具有SQL语句特征的输入。专注于:前端工程师、Web后端工程师。②XSS攻击Web安全三种攻击方式中的第二种,全称是CrossSiteScripting(跨站脚本)。为了区别于重叠样式表CSS,又改了一个缩写XSS。XSS攻击的核心是将可执行的前端脚本代码(通常是JavaScript)植入网页。听起来很尴尬。说白了就是攻击者想让你的浏览器执行他写的JS代码。那怎么办呢?XSS一般有两种类型:反射型,如上图所示:攻击者在URL中放置JS代码作为请求参数,诱导用户点击,示例:http://localhost:8080/test?name=用户点击后,将JS作为请求参数发送到Web服务器后端。后台服务器不做检查过滤,简单处理后放入网页正文返回给浏览器。浏览器返回的网页解析,绝招!存储类型如上图所示:上述方法中的攻击脚本是直接从服务器传过来,然后返回给浏览器触发执行的。存储型和存储型的区别在于攻击脚本可以存储在数据库中,等到后面查询的时候,再将攻击脚本渲染到网页中,返回给浏览器触发执行。常见套路示例如下:攻击者在网页回复,帖子中包含JS脚本。回复提交到服务器后,存储在数据库中。其他网友查看帖子,后台查询帖子回复内容,构建完整网页,返回浏览器。网友浏览器渲染返回网页一击即中!防御方法:前后端都需要做好内容检测,过滤掉可执行脚本的入侵。专注于:前端工程师、Web后端工程师。③CSRF攻击网络安全是三招之三。攻击示意图如下:核心思想是在打开网站A的同时,打开另一个标签页打开恶意网站B,对网站A进行HTTP请求。这个过程的危害在于两点:这个HTTP请求不是用户主动的,而是B“教唆”的,如果是比较有害的请求操作(发邮件?删除数据?等),就麻烦了。因为A网站之前已经打开过,浏览器中保存了A发出的cookies或者其他用于身份认证的信息,所以这次被“策动”的请求会自动带上这些信息,A网站后台无法区分是这是用户的真实意愿。专注于:前端工程师、Web后端工程师。④DDoS攻击DDoS的全称是DistributedDenialofService:分布式拒绝服务攻击。它是拒绝服务攻击的升级版。顾名思义,拒绝服务攻击会使服务不可用。常用于攻击对外提供服务的服务器,如:Web服务、邮件服务、DNS服务、即时通讯服务……在互联网技术还不发达的早期,发起DoS攻击是非常容易的攻击方式:一台性能强大的电脑写了一个多线程的程序不断向服务器请求,服务器不堪重负,最终无法处理正常的请求。对于其他正常用户来说,网站似乎无法访问,这就是拒绝服务的意思。后来随着技术的发展,现在的服务器不再是服务器那么简单了。当你访问一个www.baidu.com域名时,背后有无数的CDN节点和无数的Web服务器。在这种情况下,如果还想依靠单台计算机来尝试让网络服务满载,无异于以卵击石。对方不下来,你先下去。技术从来都是一把双刃剑。分布式技术可以用来提供高可用的服务,也可以被攻击者用来进行大规模杀伤性攻击。攻击者不再局限于单台计算机的攻击能力,而是通过大规模的网络集群发起拒绝服务攻击。拒绝服务攻击其实是一种技术,根据实现方式的不同还可以进一步细分:SYNFloodICMPFloodUDPFlood......防御方式:即使是现在,也没有100%防护DDoS的保证防御方法只能依靠一些缓解技术将攻击的威力降低到一定程度。这些技术包括:流量清理、SYNcookie等。专注于:运维工程师、安全工程师。⑤DNS劫持在当今的互联网流量中,以HTTP/HTTPS为主的Web服务产生的流量占了绝大多数。Web服务的发展如火如荼,而这背后还有一个不为人知的大功臣,那就是域名解析系统:如果没有DNS,我们上网时需要记住的是每个网站的IP地址,而不是他们的域名。互联网。这是一场灾难,幸好DNS默默无闻,这一切都是在幕后完成的,我们只需要记住一个域名,剩下的由DNS来做。也正是因为它的重要性,别有用心的人不会放过它,发明了DNS劫持技术。DNS提供将域名转换为IP地址的服务。但是在早期协议的设计中,并没有过多考虑其安全性。对于查询方:我请求的真的是DNS服务器吗?难道是别人冒充DNS服务器?查询结果是否被篡改?这个IP真的是网站吗?DNS协议中没有机制来确保这些问题能够得到解答,因此DNS劫持非常猖獗。从用户在地址栏中输入域名开始,一路上的危险让人防不胜防:本机木马修改hosts文件,本机木马修改DNS中的reply节点数据包(如路由器)修改DNS数据包中的reply节点(如运营商)provider)修改DNS数据包中的response...后面为了在client端验证收到的DNSresponse之后,DNSSEC技术出现,可以在一定程度上解决上述部分问题。但由于某些原因,这项技术一直没有大规模使用,尤其是在中国,很少部署。后来,阿里、腾讯等互联网龙头厂商开始推出httpDNS服务,就是锅底抽薪的招数。虽然这项技术的名称中有DNS的三个字母,但实现方式与原来的DNS有很大的不同。通过这种技术,DNS成为了http协议之上的应用服务。专注于:安全工程师、后端工程师、运维工程师。⑥TCP劫持TCP是TCP/IP协议族中非常重要的一员,位于传输层。该协议本身不对TCP传输的数据包进行身份验证。所以只要我们知道一个TCP连接中的seq和ack,我们就可以很容易地伪造传输包,假装任何一方与另一方通信。我们称这个过程为TCP会话劫持(TCPSessionHijacking)。TCP劫持技术是一项非常古老的技术,自1995年提出后就受到了黑客的青睐。但是近年来,随着操作系统层面安全机制的增强和防火墙软件检测能力的提高,这种基本的攻击方式越来越容易被发现,逐渐淡出了人们的视野。专注于:安全工程师、运维工程师。⑦端口扫描技术端口扫描是黑客经常使用的技术。一般用作网络攻击的前期,检测目标启用了哪些服务,进而对接下来的服务发起攻击。记得刚学网络安全的时候,大家总会拿出一个工具来扫一扫。虽然扫描后没有更多内容,但他们总是乐此不疲,在不懂的人面前炫耀自己的“黑客”本领。在以TCP/IP协议族构建的Internet中,网络服务总是离不开端口的概念。无论是TCP还是UDP,应用层都需要一个端口号来进行网络通信。我们常用的服务端口有:21:FTP文件传输服务25:SMTP邮件服务53:DNS域名解析系统服务80:HTTP超文本传输??协议服务135:RPC远程过程调用服务443:HTTPS3389:MSRDP微软远程桌面连接服务...端口扫描的原理。对于基于UDP的服务,发送相应的服务请求包,看是否有响应;对于基于TCP的服务,尝试发起三次握手发送TCPSYN包,看是否有应答。如果远程服务器有响应,则说明对端服务器上正在运行相应的服务。下一步是进一步检测对端服务器使用的操作系统、运行的服务器程序的类型和版本等,然后针对相应的易受攻击的程序发起网络攻击。可见,为了安全起见,应该尽可能少的信息暴露在Internet上,关闭不必要的服务端口。防御手段:使用防火墙等安全产品,即时发现并阻断非法扫描检测行为。专注于:运维工程师、安全工程师。系统安全系统安全部分的技术泛指发生在终端上的攻击,与操作系统密切相关。①栈溢出攻击栈溢出攻击历史悠久,也是系统端最基本的攻击方式。现代计算机基本上建立在冯诺依曼系统之上,而这个系统最大的问题之一是数据和指令都存储在内存中。在计算机的内存中,不仅包含程序运行的所有代码指令,还包含程序运行的输入输出等各种数据。没有强制性机制来区分指令和数据。因为对于计算机来说它们是相同的二进制0和1,所以大部分时候都是由程序按照既定的“规则”去解释和理解内存中的这些0和1。而当这些“规则”被误解时,事情就会变得更糟。具体到我们现代的CPU和OS,无论是x86/x64处理器还是ARM处理器,都采用了寄存器+栈的设计,而这个栈不仅包含了程序运行时各个函数栈帧中的变量数据,等信息,还保存了函数调用产生的返回地址。所谓栈溢出攻击就是通过某种手段进入栈中的缓冲区,突破缓冲区原来的边界,将存放返回地址的位置改写为一个值,使其指向恶意代码攻击者事先安排的位置。劫持程序的执行流程。防御手段:现代操作系统对于栈溢出攻击都有非常成熟的解决方案,比如Linux平台的StackCanary、Windows平台的GS机制等,程序员需要做的就是充分利用这些机制。专注于:C/C++工程师。②整数溢出攻击与栈溢出攻击相同。整数溢出攻击也是一种溢出攻击。不同的是,溢出的目标不是栈中的缓冲区,而是一个整数。我们知道,计算机的值是用补码来表示和存储的。在表示有符号数时,最高位用来表示是正数(0)还是负数(1)。比如对于一个16位的短型变量,+1和-1分别表示如下:+1:0000000000000001-1:111111111111111一个16位的短型变量表示的范围是-32768~32767,现在想一个问题,if一个short变量的值现在是32767:32767:011111111111111如果现在对它进行+1运算,它将变成:1000000000000000这就是-32768的补码形式!试想一下,如果变量名是length作为strcpy的参数,或者调用index作为数组的下标。整数溢出会导致可怕的后果,从进程崩溃和服务停机到远程代码执行和失控。关注:所有程序员。③空指针攻击空指针一般发生在指针没有初始化,或者使用new创建对象/内存分配失败,粗心的程序员没有检查指针是否为空而访问的攻击。大多数情况下,这会导致内存地址访问异常,程序崩溃退出,导致拒绝服务。在某些特殊情况下,一些操作系统允许分配内存起始地址为0的内存页,如果攻击者提前在该页准备攻击代码,则可能存在执行恶意代码的风险。④UseAfterFreeAttackUseAfterFree是指访问一个已经释放的内存块。它们中的大多数出现在针对浏览器的JavaScript引擎的攻击中。一般情况下,我们不能再访问一个被释放的对象,但是如果程序员粗心,删除对象后,并没有立即将指针置为NULL,后面继续使用该指针访问对象(例如,通过对象的虚函数表指针调用虚函数),会出现内存访问异常。在上面的场景中,如果攻击者删除对象后立即创建了一个内存大小相同的新对象,在现代操作系统的堆内存管理算法中,新对象很有可能会被放到新的删除的对象。对象的位置。这时候还是用原来对象的指针来访问,就会有鸽子占鹊巢,后果很可怕。养成良好的编程习惯。对象被删除后,指针会及时清空。专注于:C/C++工程师。⑤HOOKHOOK钩子的本意常用于计算机编程中,改变原程序的执行流程。在互联网充斥流氓软件的年代,流行一种键盘记录木马,用来记录用户的键盘输入以窃取密码,其中QQ曾是重灾区。实现该功能的技术是使用HOOK技术,对键盘的事件消息进行hook。除了消息HOOK,程序执行流程层面的HOOK用得更多。将恶意代码注入目标程序后,在函数入口处添加跳转指令,使此处执行的线程转而执行攻击者的代码,从而达到修改和过滤参数的目的。HOOK技术不仅被黑客使用,安全软件也使用。安全软件需要守护整个系统的安全防线。通过HOOK技术,在各种敏感API处设置校验,抵御非法调用攻击。另外,HOOK技术也常用于软件补丁技术。软件厂商在发现原程序漏洞后,利用HOOK修改已有程序的执行逻辑,从而达到修复漏洞的目的。专注于:C/C++工程师。⑥权限提升现代操作系统为运行在其中的进程和线程提供权限管理,因为安全攻击是不可避免的,权限限制作为有效的屏障将程序被攻击的影响降到最低。也就是说,即使我们的程序因为漏洞被攻击执行了恶意代码,由于操作系统的权限控制,恶意代码能做的事情也是有限的。就像硬币总是有两面的,有权限限制,自然会有权限升级。如果攻击者想要做更多的事情,就必须突破操作系统的限制,获得更高的权限。在Windows上,通常称为获得管理员权限。在Linux上,常被称为root权限,这也是移动root的意思。在iOS上,它通常被称为“越狱”。有多种特权升级方法。一般来说,当程序执行时,其所属的进程/线程都有一个安全令牌来标识其安全级别,操作系统内核在访问资源和执行动作时对其进行审计。提权的目的是将这个安全令牌变成一个高级别的令牌,以便在以后访问敏感资源和执行敏感动作时能够通过系统的安全审计。更改此安全令牌的常用技巧是利用操作系统内核漏洞(如堆栈溢出、整数溢出、释放后使用等)来执行攻击者的代码来篡改安全令牌。重点:安全工程师。⑦可信计算安全攻击无处不在,不仅应用环境不可靠,就连操作系统内核环境也充满风险。如果一个程序(比如支付)必须在极其绝密的环境中执行怎么办?可信计算的概念是由安全研究人员提出的。根据维基百科的解释:可信计算/可信计算(TrustedComputing,TC)是由可信计算组(TrustedComputingCluster,原名TCPA)推动和发展的一项技术。可信计算是一种由硬件安全模块支持的可信计算平台,广泛应用于计算和通信系统,以提高系统的整体安全性[1]。背书密钥是芯片出厂时随机生成的2048位RSA公私钥对,不可更改。这个私钥始终在芯片上,公钥用于验证和加密发送到芯片的敏感数据。可信计算中一个很重要的概念就是可信执行环境TEE(TrustedExecutionEnvironment)。简单的说,就是在现有的电脑内部建立一个世界秘密基地,专门用来运行极其机密的程序。即使操作系统也很容易无法访问秘密基地,更不用说其上的应用程序了。在移动端,ARM芯片占据主流市场。ARM芯片提供了一种叫做TrustZone技术的技术,在硬件层面增加了一个可信的计算环境,包括一个可信的OS,以及一些可信的APP。层次隔离,处理器内部通信,完成两个世界的交互。专注于:终端系统工程师。密码学由于数据传输过程中存在信息泄露、篡改、伪造等风险,加密技术应运而生。①对称加密&非对称加密有加密就有解密。根据加密过程中使用的密钥和解密过程中使用的密钥是否相同,加密算法分为对称加密和非对称加密两类。最早的加密技术是对称加密:加密密钥与解密密钥相同,特点是加密速度快,加密效率高。常用的对称加密算法有:DESAESRC4这种加密方式一个很关键的问题是解密方需要获取密钥才能解密,而密钥密钥在通过网络传输时会面临不安全的风险。这是一个先有鸡还是先有蛋的问题。于是发明了一种通信技术中划时代的技术,这就是非对称加密!非对称加密:加密密钥与解密密钥不一致,特点是算法比较复杂,但安全性高。非对称加密的密钥一般分为公钥和私钥,公钥是公开的,私钥需要保密。常用于数字认证,如HTTPS中握手阶段的服务器认证。常用的非对称加密算法有:RSADHECC(EllipticCurveEncryption)可以毫不夸张地说,如果没有非对称加密,互联网不可能发展到今天的高度。②秘钥交换技术在互联网通信中,有加密也有解密,解密自然需要密钥,那么如何把密钥告诉对方呢?密钥交换算法就是要解决这个问题:如何安全地将密钥传输给对方?回过头来看上面提到的非对称加密,可以解决这个问题:服务端负责生成一对公私钥,公钥告诉客户端,私钥由客户端保存。客户端得到公钥后,用它来对后续通信要用到的对称加密算法密钥进行加密传输。服务器收到后,用私钥解密。双方得到密钥后,就可以通过对称加密进行传输和通信了。上面的例子不仅仅是一个例子。在早期版本的HTTPS中,密钥交换是通过这种方式进行的。在后来的版本中,越来越多地使用另一种称为DH及其变体的密钥交换算法。DH的全称是Diffie-Hellman,由两位数学家的名字组成。该算法的核心是完全通过数学运算来交换密钥。③信息摘要算法信息摘要算法实际上并不是一种加密算法。加密的前提是可以通过解密来恢复,但是信息摘要算法的目的不是为了保护数据,也不能解密和恢复。在某些语境下,我们对信息汇总的了解较少,听到较多的术语是哈希。信息摘要算法的目的之一是验证数据的正确性。算法是公开的,数据通过算法得到一个汇总值,收到数据后,通过算法计算摘要,前后对比就知道是否被篡改了。常用的信息摘要算法有:MD5SHA1SHA256④数据编码技术严格来说,数据编码技术并不是一种加密算法,因为它的目的不是为了加密,而是为了对数据进行编码以便传输。最常见的编码算法是base64,多用于对二进制数据进行编码,将不可见的字符转换为由64个常用字符组成的文本,便于打印、显示、传输和存储。例如邮件eml格式,将附件文件进行base64编码。除了base64,还有base58,常用来对比特币钱包地址进行编码。basefamily还包括base85、base92、base128等多种算法。它们的区别不仅在于编码所涉及的字符集不同,算法执行也各有优势。⑤多因素认证技术说到认证,最常见的场景就是登录和支付。传统的认证技术是加密技术,但是随着网络攻击的日益猖獗,互联网渗透到人们生活的方方面面,传统的加密技术的安全性已经不足以适应互联网的发展。多因素认证技术是指在传统的密码认证之外,引入其他认证技术进行补充,使用两种或两种以上的方法共同完成认证。随着人工智能技术的发展,以生物识别为基础的认证技术突飞猛进:指纹认证、虹膜认证、人脸识别……世界上从来不乏先行者。多因素认证看似复杂,好在有很多龙头企业搭建了认证平台。对于大多数公司来说,他们需要做的就是下载SDK并调用API。目前国内外主流的多因素认证平台主要有三大派系:国际标准FIDO,国内则有翼支付、百度钱包、京东钱包、微众银行等。阿里系IFAA也凭借阿里在电商领域的优势吸引了众多追随者。腾讯系图思。总结本文列举了一些常用的信息安全技术,主要分为三个方面:网络安全、系统安全和密码学。信息安全技术不仅仅适用于安全工程师。作为一名程序员,了解这些技术将有助于我们建设更美好的世界!