草庐IT

渗透测试(PenTest)基础指南

sealio 2023-03-28 原文

什么是渗透测试?

渗透测试(Penetration Test,简称为 PenTest),是指通过尝试利用漏洞攻击来评估IT基础设施的安全性。这些漏洞可能存在于操作系统、服务和应用程序的缺陷、不当配置或有风险的用户行为中。这种评估也有助于验证防御机制的有效性以及最终用户是否遵守安全政策。
​ 

渗透测试通常使用手动或自动技术来系统地破坏服务器、端点、网络应用、无线网络、网络设备、移动设备和其他潜在的暴露点。一旦某个系统的漏洞被成功利用,测试人员会尝试利用被破坏的系统继续攻击其他内部资源,特别是,会通过权限升级逐步获取更高级别的安全许可和对电子虚拟资产和信息的更深入访问。
​ 

通过渗透测试成功暴露的任何安全漏洞信息通常会被汇总提交给 IT 和网络系统经理,以帮助这些专业人士做出战略性结论并调整修复工作的优先级。渗透测试的根本目的是衡量系统或终端客户被破坏的可能性,并评估此类事件可能对相关资源或操作产生的任何后果。
​ 

把渗透测试看成是试图通过自己动手来确认是否有人能闯入你的房子可能更好理解。渗透测试人员也被称为道德黑客,使用受控环境评估IT基础设施的安全性,以安全地攻击、识别和利用漏洞。区别在于他们不是检查门窗,而是测试服务器、网络、网络应用程序、移动设备和其他潜在的突破口,以发现整套系统的弱点。
​ 
​ 

渗透测试的5个阶段

渗透测试的整体流程可以分为5个阶段:规划和侦查、扫描、获取访问权限、维持访问权限、分析。
​ 

1、 规划和侦查

第一阶段主要包含以下两个内容:

  • 定义测试的目标和范围,包括要处理的系统和要使用的测试方法
  • 收集情报(例如,网络和域名、邮件服务器)以更好地了解目标的工作方式及其潜在漏洞
    ​ 

2、 扫描

渗透测试人员会使用工具来检测目标网站或系统的弱点,包括开放的服务、应用安全问题以及开源漏洞。渗透测试人员根据他们在侦查和测试期间发现的内容使用各种工具。通常包含以下两类工具:

  • 静态分析:检查应用程序的代码,以预估它在运行时的行为方式。这类工具可以一次性扫描整个代码。
  • 动态分析:在运行状态下检查应用程序代码。这是一种更实际的扫描方式,因为它可以实时查看应用程序的性能。
    ​ 

3、 获取访问权限

攻击者的动机可能包括窃取、更改或删除数据,转移资金或是损害公司声誉等。因此,这一阶段会使用网络应用攻击,例如跨站脚本攻击、SQL注入和后门等攻击方式,以发现目标漏洞。渗透测试人员会确定最合适的工具和技术来获得对系统的访问,然后利用这些漏洞,以了解她们可能造成的损害。
​ 

4、 维持访问

这一阶段的目标是看这些漏洞是否可以在目标系统中保持足够长的时间以达成攻击者的目的。这是为了模拟复杂的持续性威胁,这些威胁通常在系统中停留数月以窃取企业中最敏感的数据。
​ 

5、 分析

渗透测试的结果随后会汇编成一份报告,包含以下内容:

  • 被利用的具体漏洞
  • 被访问的敏感数据
  • 渗透测试人员能够留在系统中而不被发现的时间

安全人员对这些信息进行分析,以帮助配置企业的WAF设置和其他应用安全解决方案,以修补漏洞和阻止未来可能产生的攻击。
​ 
​ 

应该授予渗透测试人员多少权限?

根据渗透测试的目标,测试人员能够获取不同等级的信息或是目标系统的访问权限。在某些情况下,渗透测试团队会在开始时采取某种方法并一直坚持下去。其他时候,随着渗透测试期间对系统认识的深入,测试团队也会迭代其测试策略。因此,有3个层次的渗透测试访问权限:
​ 

  • Opaque Box:测试团队对目标系统的内部结构毫无了解。他们需要像黑客一样行事,探测可以从外部利用的任何弱点。
  • Semi-opaque Box:团队掌握了一套或多套凭证。并且知道目标的内部数据结构、代码和算法。渗透测试人员可能会根据详细的设计文件,如目标系统的架构图,设计测试方案。
  • Transparent Box:渗透测试人员拥有访问系统、系统组件(包括源代码、二进制、容器和其他运行在该系统上的服务器)的权限。这种方法可以在最短的时间内为目标系统提供最高级别的保障。
    ​ 
    ​ 

渗透测试的类型

全面的渗透测试对于优化风险管理至关重要,这需要测试你所在环境中的所有区域:

  • Web App:测试人员检测安全控制的效率并查找隐藏的漏洞、攻击模式以及其他导致 Web App 被破坏的潜在安全缺口。
    ​ 

  • 移动应用:利用自动化和扩展的手动测试,测试人员可以寻找在移动设备上运行的应用程序二进制文件和相应的服务器端功能的漏洞。服务器端的漏洞包括会话管理、加密问题、认证和授权问题以及其他常见的网络服务漏洞。
    ​ 

  • 网络:这种测试可以确定外部网络和系统中的常见漏洞和关键漏洞。专家们会设置一个检查表,其中包括加密传输协议、SSL证书范围问题、管理服务的使用等测试用例。
    ​ 

  • 云:云环境与传统本地环境存在巨大的差异。通常情况下,安全责任是由使用环境的企业和云服务提供商共同承担。正因为如此,渗透测试需要一套专门的技能和经验来仔细检查云的各个环节,如配置、API、各种数据库、加密方式、存储和安全控制。
    ​ 

  • 容器:从 Docker 获得的容器往往存在漏洞,并且可以被大规模利用。错误配置也是与容器及其环境相关的常见风险。以上这两种风险都可以通过专业的渗透测试发现。

​ 

  • 嵌入式设备(IoT):嵌入式或物联网设备(如医疗设备、汽车、智能家居、智能手表等)由于其较长的使用周期、电源限制、监管要求以及位置分散等特性,需要独特的软件测试方法。专家们在进行彻底的通信分析的同时,还需要进行客户端/服务器分析,以确定在相关使用场景中是否会出现漏洞。
    ​ 

  • API:采用自动和手动测试技术力求覆盖 QWASP API 安全 Top 10 名单。测试人员寻找的一些安全风险和漏洞包括 Broken Object Level Authorization(BOLA)、用户认证、过度的数据暴露、缺乏资源/速率限制等等。
    ​ 

  • CI/CD 流水线:现代 DevSecOps 实践将自动化和智能代码扫描工具整合到 CI/CD 流水线中。除了发现已知漏洞的静态工具外,自动渗透测试工具也可以被集成到 CI/CD 流水线中,以模拟黑客的行为方式来破坏应用程序的安全。自动化的 CI/CD 渗透测试可以发现隐藏的漏洞和攻击模式,这些漏洞和攻击模式在静态代码扫描中是无法发现的。
    ​ 
    ​ 

为什么渗透测试如此重要?

识别并对安全风险进行优先排序

渗透测试评估了企业保护其网络、应用程序、端点和用户的能力,以防止外部或内部试图规避安全策略来获得对敏感数据的访问。
​ 

智能管理漏洞

渗透测试会向企业提供关于可利用的安全威胁的实际信息。通过执行渗透测试,你可以主动识别哪些漏洞是致命的,哪些是不太重要的,哪些是假阳性。这使你的组织能够更明智地确定补救措施的有限次序、应用所需的安全补丁,并更有效地分配安全资源,以确保它们发挥最大优势。
​ 

识别现有的安全项目是否在正常运行

没有对整个环境的适当可见性就贸然改变安全策略可能会导致你所解决的安全问题都是一些实质上不会造成任何伤害的问题。渗透测试不仅能告诉你组件是否在正常运行,它们还可以进行质量检查,所以通过渗透测试你也会发现什么策略是最有效的,什么工具可以提供最高的投资回报率。
​ 

符合监管要求

渗透测试帮助企业解决审计和合规性问题。通过利用企业的基础设施,渗透测试可以准确地证明攻击者是如何获得敏感数据的。随着攻击策略的发展和演变,定期的强制测试可以确保企业在漏洞被利用之前发现并修复安全弱点,从而领先一步。
​ 

此外,对于审计人员来说,这些测试还可以验证其他规定的安全措施是否到位或者正常工作。渗透测试所生成的详细报告还可以帮助企业说明其在维护所需的安全控制方面做出了尽职的工作。

有关渗透测试(PenTest)基础指南的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  7. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  8. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  9. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  10. ruby-on-rails - 如何调试 cucumber 测试? - 2

    我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element

随机推荐