计算机相关专业实习报告
发布时间:2024-08-30 01:39:50
专业实习报告871279朱育民一、工作内容这学期跟李锡捷老师实习,参加的工作项目是信息安全组,因为平时较其它三位组员多接触UNIX-Like的环境,因此成为本组组长并协助联络事情。我们期初一开始便有正式的case接手,是一个韩国的骇客教育机构Hackerslab委托翻译他们的一份骇客教材。对于这方面,我们四人虽然很有兴趣,但是相关的技术背景都还嫌不够,因此做起来并不是很轻松,最常遇到的问题就是专业名词的查询与翻译,常常会有不知如何是好的窘境发生,幸好系上的学长大多能提供我们一些查询的方向,大部分的问题到最后还是能顺利完成,这样初期的翻译工作大约持续了一个多月后暂时结束。对外的case完成后,我们继续朝着信息安全相关的方向研究,主要是针对两个程序进行改进工作,一个为测试系统漏洞的Nessus,一个为侦测入侵系统Snort,至此小组里再以两人一组细分为Nessus组跟Snort组,各自进行测试工作。我所分配的是Nessus组,这是一种可以用来测试服务器有哪些网络漏洞的程序,由于采用Plug-ins的方式安装,因此可以随时安插新漏洞的测试Plug-ins,加上Nessus总部的CVS机制,只要你的Nessus系统有定期CVS更新,就能保持最新的完整漏洞测试。在业界杂志的评比里Nessus的评价甚至超越许多商用软件(Nessus是免费的),但是他有个小缺点,就是有关漏洞测试报告的部分作的并不是十分完整,每支漏洞的测试回报完整与否,取决于Plug-ins作者是否有在写作Plug-ins加上完整的叙述与解决方案,问题是大部分的Plug-ins都只有程序代码,并没有对叙述及解决方式作批注说明,因此即使在使用Nessus测出系统的安全漏洞后,使用者必须在到网络上搜寻解决方法,这样作实在不是很便利,因此老师希望我们能对于Nessus的测试回报部分作改良,写出一个报告阅读程序,结合庞大的信息安全信息,让使用者能在检测出漏洞的同时,直接取得相关的信息和解决方案,便利系统管理者在改善本身系统安全的时效性。二、学习 Hackers Zone这学期最早接触的学习环境,应该要算Hackerslab提供的一个骇客练习用工作站Free Hacker Zone。这是一台用Linux架起来的工作站,里面分将使用者分作level0到level14,每取得下依个等级的使用者权限,都有一个相对应的系统漏洞需要去破解,训练使用者在实作中了解骇客破解系统的方法,我一面翻该组织的FAQ,一面尝试错误,让我一路攻到level10,其中学习到的手法包括了使用者权限设定,寻找特定权限的档案,利用系统分隔符来欺骗系统,溢位攻击等等,然而在前进level11时,因为该漏洞必须自韩国本地进行破解,因此只好作罢,没能进一步继续。不过这个经验对于后来翻译Hackerslab的文件有的不少的助益!教材翻译经过这段暖身后,我们正式接下Hackerslab文件翻译的工作,我负责的是Sniff(监听)与网页安全两份教材。在以太网络上,只要是同一个lan上的机器,都能收到在lan上传送的封包,系统核心会进行比对,如果该封包是属于自己的就继续处理,如果不是就忽略掉,而sniffing原理就是改变最后的步骤,将所有经过的封包,不管是否属于自己,全部抓进来记录。Sniffing的正面意义应该是用于处理观察网络流量状况,一旦网络出现异常时,可以藉由Sniffing来观察有哪些异常封包,帮助排除异常状况。至于窃取传送中的使用者账号跟密码,则是cracker的行为,这并非Sniffing的本意。对于区网内要如何避免被Sniff,最简单是在该区网内使用switch hub。跟hub不同的是,hub会将接收到的封包向所有连接的host传送出去,但switch本身具有MAC路由表的功能,可以记得哪一个MAC地址要从哪一个连接埠送出去,因此不会让不相关的host收到该封包,大大减少了被Sniff撷取封包的机会。另外一种作法是对于传送的封包均作加密处理,这样就算被他人撷取到封包,对方也很难将封包解密而还原成原本的样字加以解读。常见的加密方式例如: SSL(Secure Socket Layer)、PGP (Pretty Good Privacy)、SSH (Secure Shell)、VPN (Virtual Private Network)等等。Sniff完最重要的工作是分析抓到的封包,因此这里对于各种通讯协议的封包意义大致讲解过一遍,例如该封包的来源与目的地,长度,数据内容,CRC检查码等等。另外一个章节是有关网页安全,包含了浏览器跟服务器两部分,这里大多是讲述理论性质的部分。首先是有关网页服务器,对于crack的问题,最重要的还是管理者(administrator)的认知问题,只要对系统的安全性随时保持警觉,绝对能防止crack事件的发生。目前有关网络上的服务应用虽然对于ftp或e-mail,都有许多独立的应用程序可以利用(如cute-ftp或outlook),但现在一般上网的使用者,仍有许多的机会直接使用网页来对ftp做存取跟收发e-mail,此外还有许许多多功能,也都被整合在网页浏览中,当网页服务器要兼任的服务越多,也就提供了更多让cracker入侵的机会,这是发展网页功能的同时必须付出的代价,因此,身为一个网页服务器的管理员,有责任负起保护自己服务器使用者的权益,对于安全性一定要随时保持高度的警觉性。尤其随着电子商务的发展,网页扮演的角色越来越吃重,在往夜间传递使用者信息的机会越来越多,更增加了安全性的顾虑,然而使用者多半对于这方面安全性问题不够警觉(甚至不了解严重性),只要有cracker使用一些恶意或欺骗的applet或scripts,就有可能将使用者的信息窃取到手,也可以自远程将使用者的计算机加以控制甚至令其当机,使用者对于浏览网页时的安全比必须要比过去更加留意。常见的网页攻击模式包括:溢位攻击(buffer overflow) :顾名思义, 就是利用 buffer overflow 的原理达成目的的......比如, 一个数组只有100 bytes, 但我喂给它200 bytes 的数据,于是这个数组装不下这些数据, 造成了 overflow......为什么 overflow 会有 security hole 呢?首先, overflow 发生时, 多出来的数据会盖到其它变量上,相信这一点大家早就知道了。问题是, 为什么数据盖到其它变量上时, 顶多使程序执行错误,会严重到出现 security 的问题吗? 这时, 好玩的事情就发生了.......当我们呼叫一个 function 时, 以汇编语言的观点,会将 return address 堆入 stack 中。如果这个 function 宣告了一些 local 变量,那进入这个 function 之后, 会在 stack 中再空出一块区域给这些 local 变量,当要从这个 function return 回去时, 就把这些在 stack 中的 local 变数清掉。现在好了, buffer overflow security hole 就是在这里发生了.......如果有某个 function 宣告了一个 local array, 如: int func() { int i, j, k; char buf[16]; struct abc *x, *y, *z; . . .}这样就很明显了, 如果在这个 function 内有了 bug, 忘记去控制数据喂给 buf 的长度,当数据喂长一点, 就可以盖到这个function 的 return address指到自己所喂进去的 code 上 这时, function 执行完毕, 要 return 时, 它就不会 return 到原来呼叫它的地方, 而会 “return” 到我所喂进去的那些 code,这么一来入侵者就可以为所欲为了! Denial of Service ( DoS ,阻断服务攻击) :所谓阻断服务攻击,是攻击者利用受害者的操作系统、网络应用程序(服务)或网络通讯协议的漏洞来攻击受害者,促使目标主机的系统或服务发生瘫痪的情况,可能造成系统资源耗尽、引响正常联机品质、网络频宽被占满、网络应用程序(服务)停止运作、系统当机等情形,使正当的使用者无法正常使用该主机所提供的服务。另一种情况是系统管理者为了测试目的尝试对自己主机展开攻击,测试操作系统或是网络应用程序(服务)中是否含有可能被攻击的漏洞存在。像立骇科技(HackersLab)的入侵测试(Penetration Test)、卫道科技的网络安全漏空扫瞄仪(NAI CyberCop Scanner)都可针对企业内的操作系统、网络甚至数据库做健康检查,其它DoS的攻击都是不合法的,而且动机通常出自恶意。Distributed Denial of Service(DDoS,分布式阻断服务攻击):所谓分布式阻断服务攻击,是运用在于受害者的系统资源、网络频宽条件都比攻击者来的好,如果攻击者想一对一的攻击被害者,可能会失败甚至导致自己的系统或网络瘫痪,所以采取一对多的攻击方式,攻击者先在一些防备较弱的主机中种植攻击程序。随后攻击者对各主机中的的攻击程序发出攻击命令,要求对目标主机发出庞大数量且多种的封包,庞大的数据量会瘫痪目标主机而使得无法正常提供服务。DDoS不但可以提高成功率,还可以缩短攻击的时间及减少被发现的机会。※以目前骇客的行径而言,大多比较倾向于使用威力强大的DDoS攻击,尤其是针对规模大的网站时。 CGI : 一种让网页执行外部程序的一种接口,正因为如此,只要权限或设定有问题,或程序编写有问题,很容易成为cracker入侵系统的快捷方式。自动目录列表 : 取得网页跟目录下的档案列表将使得cracker清楚知道该网站结构,很容易便能发觉后门所在甚至下载有问题的程序代码回去破解分析,对于入侵更为容易使用者认证的攻击 : 利用一账号文件跟密码字典文件的配合,强制通过网页认证的一种手法。3. NessusNessus官方网站 : Http://,目前最新释出的版本为,是一种用来侦测网络服务器或工作站的网络漏洞的工具。这套侦测系统是Client-Server的方式运作,服务器端包括了使用者账号的管理以及各种漏洞测试的Plug-ins,而Client则利用服务器端所提供的各种Plug-ins来测试工作站或服务器并产生报告,报告的格式包括了HTML、XML、NSR(Nessus本身的存档格式) 、TXT、TEX(LaTex格式)。其Plug-ins自有一套语法叫做NASL(Nessus Attack Scripts Language),可以自订对特定的连接埠进行封包测试,藉以判断是否为漏洞(早期使用C语言来作为Plug-ins的语法,但以被淘汰) 一、安装安装的方式分为Server跟Client两部分。首先Server必须安装在UNIX环境下,(已试过FreeBSD : ports安装 跟Linux : rpm安装)这部分没有什么问题,装下去就对了,接下来必须安装Plug-ins(若是不装Plug-ins,Nessus什么也不会测),Plug-ins可以选择一个一个下载后拷到指定目录即可,不过正确的作法应该是使用CVS的方式来维护更新Plug-ins的版本。CVS系统又分作CURRENT跟STABLE两种,STABLE版本但讲究稳定,许多新释出的Plug-ins并没有包括在里面,而CURRENT虽然有最新的Plug-ins,但测试不见得稳定正确,有可能将你的受测工作站或服务器损害,因此要使用那个版本请自行斟酌。安装方式如下:1. 设定环境变量$ export CVSROOT=":pserver:anonymous@:/usr/local/cvs"2. 登入CVS系统 密码为 “ anon” ,只有第一次登入会需要密码,以后会自动记载你系统的某一个地方$ cvs login3-1. 如果要抓取Nessus程序STABLE版本$ cvs -z3checkout -rNESSUS_1_0 nessus-libraries $ cvs -z3checkout -rNESSUS_1_0 libnasl $ cvs -z3checkout -rNESSUS_1_0 nessus-core $ cvs -z3checkout -rNESSUS_1_0 nessus-plugins 3-2. 如果要抓取Nessus程序CURRENT版本$ cvs -z3checkout nessus-libraries $ cvs -z3checkout libnasl $ cvs -z3checkout nessus-core $ cvs -z3checkout nessus-plugins4. 以后要检查更新部分时只要打$ cvs -z3update -P nessus-libraries $ cvs -z3update -P libnasl $ cvs -z3update -P nessus-core $ cvs -z3update -P nessus-plugins完成!!Nessus是一套强大的漏洞测试工具,但是对于他产生的报告不够完整是它的一大致命伤,目前他所采行的方法是把漏洞报告及修补漏洞的方法写死在Plug-ins里,但并不是每一个Plug-ins撰写者都有写上修补方式这部分的说明,因此我们的目的是写一个Report Reader来读取Nessus所产生的报告并自动补上漏洞相关的网址(报告格式为HTML或XML),补强的方式是连结CERT的搜寻器来产生,目前遇到的问题在于我们要选择哪一种语法来写这支Report Reader的程序(VB除外),也使我们的研究主题由Nessus暂时转到了程序语言的部分,因此Nessus暂时在此打住 Language 截至目前为止,我们尝试过的语言Tcl、Perl、Python都是属于Scripting Languages,他们跟C或JAVA这种system programming languages有很大的差异。SL 会有一组派得上用场的组件 (component) ,用别的语言写成。SL 不会从头开始,而是结合已经写好的组件。比方说,Tcl 跟 Visual Basic 可以用来管理使用者接口组件,而 Unix shell script 可以把组件当作 "filter" ,来组成一条 "生产线" ,制造所要的信息。 SL 可以用来扩展已经存在组件的功能,而很少用来发展复杂的数据结构、算法。这些东西应该由组件提供。因此,SL 常被称为 "黏接语言" 或者 "系统整合语言"。为了简化组合组件的工作,SL通常没有型态。所有东西看起来,用起来都一样,也可以交换着用。比方说,在Tcl 或 VB 中,同一个变量既能存字符串,又能存整数。而程序代码跟数据可以互通,因此能够在线产生新程序。由此可以看到SL 对于文字数据的处理蛮擅长的。V像这样无型态的语言更容易结合组件。因为它并不对 "东西该如何使用" 做任何限制。组件会怎么用,搞不好连原先的设计者都不清楚。换句话说,组件的使用是有弹性的,不同状况下有不同用法。对于Scripts Language有点概念以后,我们决定选取Perl跟Python两方面进行,以Tk模块作图形化接口,正在钻研当中,目前以Perl/Tk较有进度(简清岱主打)(因为有花钱买书…没钱:~~ ),Python相关书籍也将入手,目前找到的文件教学,主要都以数学运算的应用为例子(Python的数学函式支持很丰富,一进Python的console下就可以当成一台超强的计算器来用了),近程阶段目标是写出图形化的小算盘出来。目前语言学习部分到此为止 三、自我评估及心得感想 对于这学期的实习成果,自己感觉并不是很满意,因为一开始的Hackerslab最近产生新的问题,必须要整份重弄,令人感到有点恐惧。再者,由Nessus延伸出来的Scripts Language学习,也是没有突破性的进度,最近即将面对的新挑战---PDA程序设计比赛,更因为各种原因而迟迟没犯法开始进行进一步的讨论与动作,整体来说,给自己打50的不及格分数… 感想方面,真的觉得专业实习压力比课业还来得大,尤其是每个礼拜都会有的meeting,看到大家每次meeting都跟上衣次比有所进步的样子,就更感到压力,总觉得自己还要在多学习才不会被别人赶过去。 四、对系上的建议 以往听学长姐的经验,对于专业实习期望颇高,总觉得能因为专业实习对于自己的实力大大提升,但是这一届校内专业实习的人数超越以往,而就我所认识的校内实习同学们,大多数都是虚晃一学期,因此建议对校内实习的人数能有所限制,另外,对于郭姐对实习相关的讯息一而再再而三的提醒表示感谢!!谢谢郭姐这学期为我们的辛苦!!