精华内容
下载资源
问答
  • 数据库安全性

    万次阅读 多人点赞 2018-05-19 19:24:10
    数据库的安全性是指保护数据库以防止合法使用所造成的数据泄露、更改或损坏。系统安全保护措施是否有效是数据库系统的主要技术指标之一。 1、数据库的安全因素 1)非授权用户对数据库的恶意存取和破坏 措施...

    数据库管理系统提供统一的数据保护功能来保证数据的安全可靠和正确有效。数据库的数据保护主要包括数据的安全性和完整性。

    一、安全性概述

    数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或损坏。系统安全保护措施是否有效是数据库系统的主要技术指标之一。

    1、数据库的不安全因素

    1)非授权用户对数据库的恶意存取和破坏
    措施:包括用户身份鉴别、存取控制和视图等技术。
    2)数据库中重要或敏感的数据被泄露
    措施:强制存取控制、数据加密存储和加密传输等。
    3)安全环境的脆弱性
    措施:加强计算机系统的安全性保证,建立完善的可信标准(安全标准)。

    2、安全标准简介

    安全标准比较有影响力的有:
    1)TCSEC(桔皮书):1985年美国国防部(DoD)正式颁布的《DoD可信计算机系统评估标准》。
    2)CC:1993年联合行动,解决原标准中概念和技术上的差异,将各自独立的准则合成一组单一的、能被广泛使用的IT暗转准则,这一行动被称为通用准则(CC)项目。CC v2.1版于1999年被ISO采用为国际标准,2001年我国采用为国家标准。
    目前,CC已经取代TCSEC称为评估信息产品安全性的主要标准。
    安全级别可分为: D < C2 < C1 < B3 < B2 < B1 < A1
    其中C2级的数据库管理系统支持自主存取控制(DAC),B1级的数据库管理系统支持强制存取控制(MAC)。

    二、安全控制

    计算机系统的安全模型:
    计算机系统的安全模型
    数据库管理系统安全性控制模型:
    安全性控制模型

    1、用户身份鉴别

    用户身份鉴别是数据库管理系统提供的最外层安全保护措施,每个用户在系统中都有一个用户标识(由用户名和用户标识号组成),用户标识号(UID)在系统的生命周期内是唯一的,并且系统内部记录这所有合法用户的标识,系统鉴别是指由系统提供一定的方式让用户标识自己的身份或名字。用户进入系统时由系统进行核对,通过鉴定后才提供使用数据库管理系统的权限。
    用户身份鉴别的方法:

    1. 静态口令鉴别
      目前常用的鉴别方法,相当于设置用户的密码。
      优缺点:简单,容易被攻击,安全性较低。
    2. 动态口令鉴别
      口令是动态变化的,登陆系统前就会获取新口令,相当于短信验证码或者动态令牌。
      优缺点:增加口令被窃取或破解的难度,安全性相对高一些。
    3. 生物特征鉴别
      采用图像处理和模式识别等技术,相当于指纹识别或者脸部识别。
      优缺点:产生质的飞跃,安全性较高。
    4. 智能卡识别
      智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。实际应用中一般采用个人身份识别码(PIN)和智能卡相结合的方式。
    2、存取控制

    数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未授权的人员无法接近数据,这主要通过数据库系统存取控制机制实现。

    存取控制机制主要包括定义用户权限,并将用户权限登记到数据字典中和合法权限检查。两者机制一起组成数据库管理系统的存取控制子系统。

    3、自主存取控制方法

    自主存取控制方法主要通过SQL的GRANT语句和REVOKE语句来实现。
    用户权限是由数据库对象和操作类型组成的。定义一个用户的存取权限就是要定义这个用户在那些数据库对象上可以进行那些类型的操作,即定义存取权限(授权)。
    在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身;在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(数据库、基本表、视图和索引的创建等)。
    关系数据库存取权限表
    关系数据库存取权限
    备注:在授予用户列INSERT权限时,一定要包含主码的INSERT权限,否则用户的插入动作会因为主码为空而被拒绝。

    4、授权:授予与收回

    SQL中使用GRANT(授予权限)和REVOKE(收回已授予的权限)语句向用户授予或收回对数据的操作权限。

    1. GRANT
      语句:GTANT <权限>[,<权限>]… ON<对象类型><对象名>[,<对象类型><对象名>]…TO<用户>[,<用户>]…[WITH GRANT OPTION];
      例句:GRANT SELECT(权限) ON TABLE SC(表名) TO USER(用户名);
      语义:将对指定操作对象的指定操作权限授予指定的用户。可以由数据库管理员、数据库对象创建者(属主owner),也可以是已经用于该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是全体用户(PUBLIC)。WITN GTANT OPTION就是获得某种权限的用户还可以将权限授予其他用户,如果没有就代表只能使用该权限,不能传播。

      SQL标准允许具有WITH GRANT OPTION的用户把相应权限或其子集传递授予其他用户,但不允许循环授权,即被授权者不能把权限再授回给授权者或其祖先。

    2. REVOKE
      语句:REVOKE <权限>[,<权限>]…ON<对象类型><对象名>[,<对象类型><对象名>]…FROM<用户>[,<用户>…[CASCADE|RESTRICT];
      例句:REVOKE SELECT(权限) ON TABLE SC(表名) FROM USER(用户名);
      备注:使用该语句的为数据库管理员或其他授权者
      这里默认为CASCADE,就是没有自动执行级联操作,只是收回了该用户的权限,该用户授予的其他用户的权限保留,如果使用RESTRICT就是收回该用户以及该用户授予权限的用户的权限。
      总结: 用户可以“自主”地决定将数据的存取权限授予何人,决定是否也将“授权”的权限授予别人,这样的存取控制就是自主存取控制。

    3. 创建数据库模式的权限
      对创建数据库模式一类的数据库对象的授权由数据库管理员在创建用户时实现。
      语句:CREATE USER [WITH][DBA|RESOURCE|CONNECT];
      说明:权限与可执行的操作对照表
      权限对照表
      **备注:**CREATE USER语句不是SQL标准,不同的关系数据库管理系统的语法和内容是有差别的。
    5、数据库角色

    数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。

    1. 角色的创建
      CREATE ROLE <角色名>;
    2. 给角色授权
      GRANT <权限>[,<权限>]… ON <对象类型>对象名 TO<角色>[,<角色>]…
    3. 将一个角色授予其他的角色或用户
    4. GRANT <角色1>[,<角色2>]…TO <角色3>[,<用户1>]…[WITH ADMIN OPRION];
      指定了WITN ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色,角色3拥有角色1和角色2的所有权限。一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限。
    5. 角色权限的收回
      REVOKE <权限>[,<权限>]… ON<对象类型><对象名>FROM <角色>[,<角色>]…
      用户可以回收角色的权限,从而修改角色拥有的权限。
      示例:
      CREATE ROLE R1; 创建角色
      GRANT SELECT ON TABLE SC; 授权
      GTANT T1 TO USER; 授权用户
      REVOKE R1 FROM USER; 回收权限
    6、强制存取控制方法

    自主存取控制(MAC)能够通过授权机制有效地控制对敏感数据的存取,但是由于用户对数据的存取权限是自主的,可以自由授权,这样会导致安全性降低,因此需要对系统控制下的所有主客体实施强制存取控制策略。
    定义:系统为保护更高程度的安全性,按照TDI/TCSEC标准中的安全策略的要求所采取的强制存取检查手段。它不是用户能直接感知或进行控制的。强制存取控制适用于那些数据有严格而固定密级分类的部门(军事或政府等)。
    在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类。
    1. 主体是系统中的活动实体,既包含数据库管理系统所管理的实际用户,也包含代表用户的各进程。
    2. 客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。
    数据库管理系统为主体和客体每个实例(值)指派一个敏感标记(label)。label分为绝密(TS)>=机密(S)>=可信(C)>=公开(P)。主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定主体是否能够存取客体。
    当某一用户(或某一主体)以标记label注册入系统时,系统要求他对任何客体的存取要遵循:
    1)仅当主体的许可证级别大于或等于客体的密级时,该主才能读取相应的客体。
    2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。
    强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。较高安全性级别提供的安全保护要包含较低级别的所有保护,因此在实现强制存取控制时要首先实现自主存取控制(DAC),即自主存取控制与强制存取控制共同构成数据库管理系统的安全机制。

    系统首先进行自主存取控制检查,对通过自主存取控制检查的允许存取的数据库对象再由系统自动进行强制存取控制检查,只有通过强制存取控制检查的数据库对象方可存取。

    展开全文
  • 第二章 WLAN 和固有的不安全性 作者:Vivek Ramachandran, Cameron Buchanan 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 建筑越高,地基就要打得越深。 – 托马斯·坎佩斯 没有什么伟大的东西能在脆弱的基础...

    第二章 WLAN 和固有的不安全性

    作者:Vivek Ramachandran, Cameron Buchanan

    译者:飞龙

    协议:CC BY-NC-SA 4.0

    简介

    建筑越高,地基就要打得越深。

    – 托马斯·坎佩斯

    没有什么伟大的东西能在脆弱的基础上构建。在我们的语境中,固有的不安全性之上不能构建出安全。

    WLAN 在设计上拥有特定的不安全性,它们可被轻易利用,例如,通过封包注入,以及嗅探(能够在很远处进行)。我们会在这一章利用这些缺陷。

    2.1 回顾 WLAN 帧

    由于这本书处理无线方面的安全,我们假设你已经对协议和封包的头部有了基本的了解。没有的话,或者你离开无线有很长时间了,现在是个好机会来回顾这个话题。

    让我们现在快速复习一些 WLAN 的基本概念,大多数你可能已经知道了。在 WLAN 中,通信以帧的方式进行,一帧会拥有下列头部结构:

    Frame Control字段本身拥有更复杂的结构:

    类型字段定义了下列三种 WLAN 帧:

    1. 管理帧:管理帧负责维护接入点和无线客户端之间的通信。管理帧拥有下列子类型:

      • 验证
      • 解除验证
      • 关联请求
      • 关联响应
      • 重关联请求
      • 重关联响应
      • 解除关联
      • 信标
      • 探测请求
      • 探测响应
    2. 控制帧:控制帧负责确保数据在接入点和无线客户端之间合理交换。控制帧拥有下列子类型:

      • 请求发送(RTS)
      • 清除发送(CTS)
      • 确认(ACK)
    3. 数据帧:数据帧携带在无线网络上发送的真实数据。它没有子类型。

    我们在之后的章节中讨论不同攻击的时候,会讨论这些帧中每一种的安全隐患。

    我们现在看一看如何使用 Wireshark 嗅探无线网络上的这些帧。也有其他工具 – 例如 Airodump-NG,Tcpdump,或者 Tshark – 你同样可以用于嗅探。我们在这本书中多数情况会使用 Wireshark,但是我们推荐你探索其它工具。第一步是创建监控模式的接口。这会为你的适配器创建接口,使我们可以读取空域中的所有无线帧,无论它们的目标是不是我们。在有线的世界中,这通常叫做混合模式。

    实战时间 – 创建监控模式的接口

    让我们现在将无线网卡设为监控模式。

    遵循下列指南来开始:

    1. 启动 Kali 并使适配器保持连接。一旦你打开了控制台,输入iwconfig并确保网卡被检测到,驱动被正确加载。

    2. 使用ifconfig wlan1 up命令启动网卡(其中wlan1是你的适配器)。通过运行ifconfig wlan1验证网卡是否正在运行。你应该在输出的第二行看到单词UP,像这样:

    3. 为了将网卡设为监控模式,我们使用airmon-ng,它在 Kali 中自带。首先执行airmon-ng命令来确认它检测到了可用的网卡。你应该能看到输出中列出的wlan1接口:

    4. 现在输入airmon-ng start wlan1命令来创建对应wlan1设备的监控模式接口。新的监控模式接口名为mon0。(你可以再次不带参数使用airmon-ng来验证。)

    5. 同样,运行ifconfig mon0会展示叫做mon0的新接口。

    刚刚发生了什么?

    我们成功创建了叫做mon0的监控模式接口。这个接口用于嗅探空域中的无线封包。这个接口已经在我们的无线适配器中创建了。

    试一试 – 创建多个监控模式接口

    可以创建多个监控模式的接口,使用相同的物理网卡。使用 airmon-ng 工具来看看如何完成。

    太棒了!我们拥有了监控模式接口,等待从空域中读取一些封包。所以让我们开始吧。

    下一个练习中,我们会使用 Wireshark 和刚刚创建的mon0监控器模式接口,从空域中嗅探封包。

    实战时间 – 嗅探无线封包

    遵循下列指南来开始:

    1. 启动我们在第一章中配置好的接入点Wireless Lab

    2. 通过在控制台中键入Wireshark &来启动 Wireshark,一旦 Wireshark 运行,访问Capture | Interfaces

    3. 通过点击Start按钮从mon0接口选择封包捕获,像截图中那样。Wireshark 会开始捕获,现在你可以在 Wireshark 窗口中看到封包。

    4. 这些就是你的无线适配器从空域中嗅探到的封包。为了查看任何封包,在上面的窗口中选择它,中间的窗口中会展示整个封包:

      点击IEEE 802.11 Wireless LAN management frame前面的三角形来展开并查看详细信息。

    观察封包中不同的头部字段,并将它们和之前了解的 WLAN 帧类型以及子类型关联。

    刚刚发生了什么?

    我们刚刚从空域中嗅探了第一组封包。我们启动了 Wireshark,它使用我们之前创建的监控模式接口mon0。通过查看 Wireshark 的底部区域,你应该注意到封包捕获的速度以及目前为止捕获的封包数量。

    试一试 – 发现不同设备

    Wireshark 的记录有时会令人生畏,即使在构成合理的无线网络中,你也会嗅探到数千个封包。所以深入到我们感兴趣的封包十分重要。这可以通过使用 Wireshark 中的过滤器来完成。探索如何使用这些过滤器来识别记录中唯一的无线设备 – 接入点和无线客户端。

    如果你不能做到它,不要着急,它是我们下一个要学的东西。

    实战时间 – 查看管理、控制和数据帧

    现在我们学习如何使用 WIreshark 中的过滤器来查看管理、控制和数据帧。

    请逐步遵循下列指南:

    1. 为了查看捕获的封包中的所有管理帧,在过滤器窗口中输入过滤器wlan.fc.type,并点击Apply。如果你打算防止封包向下滚动过快,你可以停止封包捕获。

    2. 为了查看控制帧,将过滤器表达式修改为wlan.fc.type == 1

    3. 为了查看数据帧,将过滤器表达式修改为wlan.fc.type == 2

    4. 为了额外选择子类型,使用wlan.fc.subtype过滤器。例如,要查看所有管理帧中的信标帧,使用下列过滤器:

      (wlan.fc.type == 0) && (wlan.fc.subtype == 8)

    5. 作为替代,你可以在中间的窗口中右击任何头部字段,之后选择Apply as Filter | Selected来使用过滤器。

    6. 这会自动为你在Filter字段中添加正确的过滤器表达式。

    刚刚发生了什么?

    我们刚刚学习了如何在 Wireshark 中,使用多种过滤器表达式来过滤封包。这有助于监控来自我们感兴趣的设备的所选封包,而不是尝试分析空域中的所有封包。

    同样,我们也可以以纯文本查看管理、控制和数据帧的封包头部,它们并没有加密。任何可以嗅探封包的人都可以阅读这些头部。要注意,黑客也可能修改任何这些封包并重新发送它们。协议并不能防止完整性或重放攻击,这非常易于做到。我们会在之后的章节中看到一些这类攻击。

    试一试 – 玩转过滤器

    你可以查阅 Wireshark 的手册来了解更多可用的过滤器表达式,以及如何使用。尝试玩转多种过滤器组合,直到你对于深入到任何细节层级都拥有自信,即使在很多封包记录中。

    下个练习中,我们会勘察如何嗅探我们的接入点和无线客户端之间传输的数
    据封包。

    实战时间 – 嗅探我们网络上的封包

    这个练习中,我们会了解如何嗅探指定无线网络上的封包。出于简单性的原因,我们会查看任何没有加密的封包。

    遵循下列指南来开始:

    1. 启动我们命名为Wireless Lab的无线接入点。让我们将其配置为不加密。

    2. 我们首先需要寻找Wireless Lab运行在哪个频道上。为了完成它,打开终端并执行airodump-ng --bssid <mac> mon0,其中<mac>是接入点的 MAC 地址。运行程序,不就你就会看到你的接入点显示在屏幕上,并带有所运行的频道。

    3. 我们可以从之前的截图中看到,我们的接入点Wireless Lab运行在频道 11 上。要注意这可能和你的接入点不同。

      为了嗅探发往和来自这个接入点的封包,我们需要将无线网卡锁定在同一频道上,也就是频道 11。为了实现它,执行iwconfig mon0 channel 11之后执行iwconfig mon0来验证。你会看到输出中的Frequency: 2.462 GHz。这相当于频道 11。

    4. 现在启动 Wireshark,开始嗅探mon0接口。在 WIreshark 开始嗅探之后,在过滤器区域输入wlan.bssid == <mac>来使用接入点 BSSID 的过滤器,像下面的截图这样。为你的接入点填写合适的 MAC 地址。

    5. 为了查看接入点的数据封包,添加下列过滤器:(wlan.bssid == <mac>) && (wlan.fc.type_subtype == 0x20)。在客户端笔记本打开你的浏览器,并输入接入点管理界面的 URL。我这里,像第一章那样,它是http://192.168.0.1。这会生成数据封包,WIreshark 会捕获它。

    6. 封包嗅探允许我们轻易分析未加密的数据。这就是为什么我们需要在无限种使用加密的原因。

    刚刚发生了什么?

    我们刚刚使用 WIreshark 和多种过滤器嗅探了空域中的数据。由于我们的接入点并没有使用任何加密,我们能够以纯文本看到所有数据。这是重大的安全问题,因为如果使用了类似 WIreshark 的嗅探器,任何在接入点 RF 范围内的人都可以看到所有封包。

    试一试 – 分析数据封包

    使用 WIreshark 进一步分析数据封包。你会注意 DHCP 请求由客户端生成,并且如果 DHCP 服务器可用,它会返回地址。之后你会发现 ARP 封包和其它协议的封包。这样来被动发现无线网络上的主机十分简单。能够看到封包记录,并重构出无线主机上的应用如何和网络的其余部分通信十分重要。Wireshark 所提供的有趣的特性之一,就是跟踪流的能力。这允许你一起查看多个封包,它们是相同连接中的 TCP 数据交换。

    此外,尝试登陆www.gmail.com和其它流行站点并分析生成的数据流量。

    我们会演示如何向无线网络中注入封包。

    实战时间 – 封包注入

    我们使用 aireplay-ng 工具来进行这个练习,它在 Kali 中自带。

    遵循下列指南来开始:

    1. 为了执行注入测试,首先启动 Wireshark,并使用过滤器表达式(wlan.bssid == <mac>) && !(wlan.fc.type_subtype == 0x08)。这会确保我们只能看到我们无线网络的非信标帧。

    2. 现在在终端中执行命令aireplay-ng -9 -e Wireless Lab -a <mac> mon0

    3. 返回 Wireshark,你会看到屏幕上会显示大量封包。一些封包已经由aireplay-ng发送,它们是我们发送的,其它的是Wireless Lab接入点用于响应注入的封包。

    刚刚发生了什么?

    我们刚刚使用 aireplay-ng,成功向我们的测试环境网络注入了封包。要注意我们的网卡将这些任意的封包注入到网络中,而不需要真正连接到无线接入点Wireless Lab

    试一试 – 探索 Aireplay-ng 工具

    我们会在之后的章节中详细了解封包注入。现在请探索一下 Aireplay-ng 工具用于注入封包的其它选项。你可以使用 Wireshark 监控空域来验证注入是否成功。

    2.2 WLAN 嗅探和注入的重点笔记

    WLAN 通常在三种不同频率范围内工作:2.4 GHz,3.6 GHz 和 4.9/5.0 GHz。并不是所有 WIFI 网卡都全部支持这三种范围和相关的波段。例如,Alfa 网卡只支持 IEEE 802.11b/g。这就是说,这个网卡不能处理 802.11a/n。这里的关键是嗅探或注入特定波段的封包。你的 WIFI 网卡需要支持它。

    另一个 WIFI 的有趣方面是,在每个这些波段中,都有多个频道。要注意你的 WIFI 网卡在每个时间点上只能位于一个频道。不能将网卡在同一时间调整为多个频道。这就好比车上的收音机。任何给定时间你只能将其调整为一个可用的频道。如果你打算听到其它的东西,你需要修改频道。WLAN 嗅探的原则相同。这会产生一个很重要的结论 – 我们不能同时嗅探所有频道,我们只能选择我们感兴趣的频道。这就是说,如果我们感兴趣的接入点的频道是 1,我们需要将网卡设置为频道 1。

    虽然我们在上面强调了 WLAN 嗅探,注入的原则也相同。为了向特定频道注入封包,我们需要将网卡调整为特定频道。

    让我们现在做一些练习,设置网卡来制定频道或进行频道跳跃,设置规范域以及功率等级,以及其它。

    实战时间 – 使用适配器做实验

    仔细遵循以下步骤:

    1. 输入iwconfig wlan0命令来查看网卡的功能。你可以看到,我们的适配器可以工作在 b、g 和 n 波段中。

    2. 为了将网卡设置为特定频道,我们使用iwconfig mon0 channel X命令。

    3. iwconfig命令集并没有频道跳跃模式。你可以在它上面编写简单的脚本来实现。一个简单的方式就是带选项使用 Airodump-NG 来跳跃任何频道,或者是某个子集,或者使用所选的波段。当我们执行airodump-ng --help的时候,所有这些选项展示在下面。

    刚刚发生了什么?

    我们知道了,无线嗅探和封包注入依赖于硬件的支持。这即是说我们只能处理网卡支持的波段和频道。此外,无线网卡每次只能位于一个频道。这说明了我们只能一次嗅探或注入一个频道。

    试一试 – 嗅探多个频道。如果你需要同时嗅探多个频道,你需要多个物理 WIFI 网卡。如果你可以获得额外的网卡,尝试同时嗅探多个频道。

    4.3 无线网络中规范域的作用

    WIFI 的复杂性到这里并没有结束。每个国家都有自己的未授权的频谱分配策略。这规定了允许的功率等级和频谱的用户。例如,FCC 规定,如果你在美国使用 WLAN,你就必须遵守这些规定。在一些国家,不遵守相关规定会收到惩罚。

    现在让我们看看如何寻找默认的规范设置,以及如何按需修改它们。

    实战时间 – 使用适配器做实验

    仔细遵循以下步骤:

    1. 重启的计算机并不要连接到适配器。

    2. 登录之后,使用tail命令监控内核信息:

      插入适配器,你会看到像这样的一些东西。这展示了网卡所使用的默认规范设置。

    3. 让我们假设你在美国。为了将规范域修改为 US,我们在新的终端中输入下列命令iw reg set US


      如果命令执行成功,我们会在终端得到这样的输出,其中我们正在监控/var/log/messages

    4. 现在尝试把网卡设置为频道 11,它生效了。但是当你尝试设置为频道 12 时候,你会得到错误。这是因为在美国不能使用频道 12。

    5. 功率等级也使用相同的原则。US 只允许最大 27 dBm(500 毫瓦)。所以即使我们的适配器的功率为 1 瓦(30 dBm),我们也不能将其设置为最大传输功率:

    6. 但是,如果我们在玻利维亚,我们就能够使用 1 瓦的传输功率,因为这里允许。你可以看到,我们将规范域设为玻利维亚 – iw reg set BO – 我们就能将网卡功率设置为 30DMB 或 1 瓦。我们在玻利维亚使用频道 12,这在美国是禁止的。

    刚刚发生了什么?

    每个国家都有用于未授权无线波段的自己的规范。当我们将规范域设置为特定国家时,我们的网卡会遵循允许的频道和指定的功率等级。但是,嗅探网卡的规范域,来强制它工作在不允许的频道上,以及在高于允许值的功率等级上传输数据相当容易。

    试一试 – 探索规范域

    查看你可以设置的多种参数,例如频道、功率、规范域,以及其它。在 Kali 上使用iw命令集。这会让你深刻了解在不同国家的时候如何配置网卡,以及修改网卡设置。

    小测验 – WLAN 封包嗅探和注入

    Q1 哪种帧类型负责在 WLAN 中的验证?

    1. 控制
    2. 管理
    3. 数据
    4. QoS

    Q2 使用 airmon-mg 在 wlan0 上创建的第二个监控器模式接口的名字是什么?

    1. mon0
    2. mon1
    3. 1mon
    4. monb

    Q3 用于在 Wireshark 中查看非信标的过滤器表达式是什么?

    1. !(wlan.fc.type_subtype == 0x08)
    2. wlan.fc.type_subtype == 0x08
    3. (no beacon)
    4. Wlan.fc.type == 0x08

    总结

    这一章中,我们对 WLAN 协议进行了一些重要的观察。

    管理、控制和数据帧是未加密的,所以监控空域的人可以轻易读取。要注意数据封包载荷可以使用加密来保护,使其更加机密。我们在下一章讨论它们。

    我们可以通过将网卡设置为监控模式来嗅探附近的整个空域。

    由于管理和控制帧没有完整性保护,使用例如 aireplay-ng 的工具通过监控或照旧重放它们来注入封包非常容易。

    未加密的数据封包也可以被修改和重放到网络中。如果封包加密了,我们仍然可以照旧重放它们,因为 WLAN 设计上并没有保护封包重放。

    下一章中,我们会看一看用于 WLAN 的不同验证机制,例如 MAC 过滤和共享验证,以及其它。并且通过实际的演示来理解多种安全缺陷。

    展开全文
  • 理解什么是线程安全性、原子性

    万次阅读 2019-12-29 11:56:30
    •原子 加锁机制 •写在前面 进程想要执行任务需要依赖线程,换句话说就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。提到多线程这里要说两个概念,就是串行和并行,搞清楚这个我们才能更好...

    目录

    •写在前面

    •原子性

    加锁机制


    •写在前面

    进程想要执行任务需要依赖线程,换句话说就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。提到多线程这里要说两个概念,就是串行和并行,搞清楚这个我们才能更好的理解多线程。所谓串行其实是相对于单条线程来执行多个任务来说的,我们就拿下载文件来举个例子,我们下载多个文件,在串行中它是按照一定的顺序去进行下载的,也就是说必须等下载完A之后,才能开始下载B,它们在时间上是不可能发生重叠的。

    要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问。要是的对象是线程安全的,需要采用同步机制来协同对对象可变状态的访问,如果无法实现协同,那么可能会导致数据破坏以及其他不该出现的结果。java中的同步机制是关键字synchronized,它提供了独占式的加锁方式,不仅如此还包括volatile类型变量,显式锁Lock以及原子变量。

    单线程近似定义为“所见即所知”,那么定义线程安全性,则当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。一个类在单线程中运行都不正确,那么它肯定是不会是线程安全的。如果正确的实现了某个对象,那么在任何操作中(包括调用对象的公有方法或者对其公有域进行读写操作)都不会违背不变性条件或后验条件。在线程安全类的对象实例上执行的任何串行或并行操作都不会处于无效状态。

    无状态的对象一定是安全的,啥是无状态?这个类既不包括任何域,也不包括任何对其他类中域的引用。举个例子,大多数Servlet都是无状态的,从而极大的降低了在实现Servlet线程安全性时的复杂性,只有当Servlet在处理请求时需要保存一些信息,线程安全性才会成为一个问题。

    •原子性

    其实原子性就是一个不可分割的,我们怎么理解呢?举个例子,当我们在无状态对象中增加一个状态时,会发生什么情况?比我们要计算一个类调用了多少次(这个类可以是Servlet),我们定义一个私有的Long类型的域(命名为count),在方法中没调用一次就将这个值加一(即count++),如下。

       Integer count = 0;
       public void getCount() {
           count ++;
           System.out.println(count);
       }

    由于我们没有对这个类进行任何的同步机制操作,所以这个类是非线程安全的,虽然在单线程环境中能正确运行,但在多线程情况下就会出现问题。我们注意到count++这个操作,这个操作看上去是一个操作,其实这个操作并非原子性的,因为它并不会作为一个不可分割的操作来执行,实际上count++ 包含了三个独立的操作,分为读取count的值,将值加1,然后计算结构写入count中,这是一个“读取-修改-写入”的操作序列,并且其结果依赖于之前的状态。在并发下就会出现问题,我再多线程下跑了上面那段代码,结果如下

    我们可以看到,这里出现了两个26,为什么会出现这种情况,出现这种情况显然表明我们这个方法根本就不是线程安全的,出现这种问题的原因有很多,我们说最常见的一种,就是我们A线程在进入方法后,拿到了count的值,刚把这个值读取出来还没有改变count的值的时候,结果线程B也进来的,那么导致线程A和线程B拿到的count值是一样的。

    在并发编程中,这种由于不恰当的执行时序而出现不正确的结果是一种非常重要的情况,它有一个正式的名字,叫“竞态条件”。竞态条件是啥?当某个计算的正确性取决于多个线程的交替执行时序时,那么就会发生竞态条件,最常见的竞态条件类型就是“先检查后执行”操作,即通过一个可能失效的观察结果来决定下一步的动作。比如首先观察到某个条件为真(例如文件X不存在),然后根据这个观察结果采用相应的动作(创建文件X),但事实上,在你观察到这个结果以及开始创建文件之间,观察结果可能变得无效(另一个线程在这个期间创建了文件X),从而导致各种问题(未预期的异常、数据覆盖、文件被破坏等)。

    与大多数并发错误一样,竞态条件并不总是会产生错误,还需要某种不恰当的执行时序。原子操作是对于访问同一个状态的所有操作(包括该操作本身)来说,这个操作是一个以原子方式执行的操作。而我们前面提到的类似count++的这种操作,叫做复合操作,即包含了一组必须以原子方式执行的操作以确保线程安全性。在实际情况中,应该尽可能的使用现有的线程安全对象来管理类的状态,与非线程安全的对象相比,判断线程安全对象的可能状态及其状态转换情况要更为容易,从而也更容易维护和验证线程安全性。这里值得一提的是,java中给我们弄好了很多原子操作的类型,在这个包下java.util.concurrent.atomic。

    加锁机制

    上面我们说了,我们可以对单个类进行原子性操作,这样可以保证我们程序的安全性,但是,我们想一想,如果当多个原子性的操作同时进行时,而且各个原子性操作之间都存在相互依赖的关系,这种情况下,我们怎么保证程序运行正确(线程安全)?如果还是使用原子性操作的方法,那么我们要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量。

    说到这里,我们就不得不提一下java提供的一种内置的锁机制来支持原子性,即同步代码块(synchronized block),同步代码快包括两部分,一个作为锁的对象引用,一个作为由这个锁保护的代码块。以关键字synchronized来修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。每个Java对象都可以用作一个实现同步的锁,这些所被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获得锁,并且在退出同步代码块时自动释放锁,这里要说,获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。值得一提的是,内置锁相当于一种互斥锁,意味着最多只有一个线程能持有这种锁。要注意了,任何一个执行同步代码块的线程,都不能看到有其他线程正在执行由同一锁保护的同步代码块(这里涉及到可见性的问题)。synchronized直接加在方法上,虽然能很方便的解决线程安全的问题,但是也会带来性能低下的问题,所以synchronized怎么使用,也是值得学习的。

    可重入函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。

    当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会被阻塞,然而,由于内置锁是可重入的,因此如果某个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味着获取锁的操作的粒度是线程,而不是调用。重入的一种实现方式是,为每一个锁关联一个获取计数值和一个所有者线程,当计数值为0时,这个锁就被认为是没有被任何线程持有。当线程请求一个未被持有的锁时,JVM将记下锁的持有者,并且将获取计数值置为1,如果同一个线程再次请求获取这个锁,计数值将递增,而当线程退出同步代码块时,计数器会相应的递减,当计数值为0时,这个锁将被释放。

    到此我们就可以将多个复合操作封装到一个同步代码块中,但是这样是不够的,如果用同步代码块来协调对某个变量的访问,那么在访问这个变量的所有位置上都需要使用同步。而且,当使用锁来协调对某个变量的访问是,在访问变量的所有位置上都要使用同一个锁。而且,并不是只有在写入共享变量时才需要使用同步,对于可能被多个线程同时访问的可变状态变量,在访问它时都需要有同一个锁,这种情况下,我们成状态变量时由这个锁保护的。

    在这里值得一提的是,当使用锁时,你应该清楚代码块中实现的功能,以及在执行该代码块时是否需要很长的时间。无论是执行计算密集的操作,还是在执行某个可能阻塞的操作,如果持有锁的时间过长,那么都会带来活跃性或性能的问题。当执行时间较长的计算或者可能无法快速完成的操作时(例如网络IO或控制台IO),一定不要持有锁。

    展开全文
  • 如何正确处理nonce

    千次阅读 2018-09-14 18:28:04
    问题概述 以太坊系列(ETH&amp;ETC)在发送交易有三个对应的RPC接口,分别是...官方文档对此参数的解释是:整数类型,允许使用相同随机数覆盖自己发送的处于pending状态的交易。 官网解释 仅从官...

    问题概述

    以太坊系列(ETH&ETC)在发送交易有三个对应的RPC接口,分别是ethsendTransaction、ethsendRawTransaction和personal_sendTransaction。这三个接口发送(或构造发送内容时)都需要一个参数nonce。官方文档对此参数的解释是:整数类型,允许使用相同随机数覆盖自己发送的处于pending状态的交易。

    官网解释

    仅从官网的解释,我们无法获取到更多的有效的信息。但在真实生成中我们会发现如果传错nonce字段值,通过RPC接口调用发送的交易很大可能将不会被确认。如果通过console命令来操作一般不会出现此问题,因为节点已经帮我们处理了。

    问题追踪

    如果继续追踪问题,会发现nonce传递错误的交易可以通过eth_getTransaction查询得到相关信息,但是它的blocknumber始终未null,也就说这边交易始终未被确认。如果是在dev模式下,应该是很快就会被确认的。更进一步,通过txpool.content命令,会发现那笔交易一直处于queued队列中,而未被消费。

    原因解析

    为了防止交易重播,ETH(ETC)节点要求每笔交易必须有一个nonce数值。每一个账户从同一个节点发起交易时,这个nonce值从0开始计数,发送一笔nonce对应加1。当前面的nonce处理完成之后才会处理后面的nonce。注意这里的前提条件是相同的地址在相同的节点发送交易。 以下是nonce使用的几条规则: ● 当nonce太小(小于之前已经有交易使用的nonce值),交易会被直接拒绝。 ● 当nonce太大,交易会一直处于队列之中,这也就是导致我们上面描述的问题的原因; ● 当发送

    展开全文
  • IIS配置 安全性配置

    千次阅读 2013-07-16 10:33:47
    最近,和朋友们在聊及ASP.NET程序的安全性没有JAVA高,IIS(Internet Infomartion Server)的存在很多漏洞(以及新型蠕虫,例如Code Red 和Nimda),安全得到保障。针对IIS的安全性查了些资料,发现IIS的安全性曾被...
  • 游戏安全性测试总结

    千次阅读 2019-05-14 19:46:00
    手机游戏安全性日显重要,在上线之前已成为一个可忽视的测试指标。 但是有关手机游戏安全性测试又任重道远…… 上线之后,依然出现各种问题,这里只单独讲下游戏安全这一块这些年的一些总结。 具体分析见后续单独...
  • 每个服务都有自己的一套API提供给别的服务调用,那么如何保证安全性呢?不是说你想调用就可以调用,一定要有认证机制,是我们内部服务发出的请求,才可以调用我们的接口。需要注意的是我们这边讲的是微服务之间调用...
  • 如何做好网站的安全性测试

    万次阅读 2013-08-29 09:11:26
    安全性保护数据以防止合法用户故意造成的破坏; 完整性保护数据以防止合法用户无意中造成的破坏; 安全性测试(security testing)是有关验证应用程序的安全服务和识别潜在注意: 安全性测试并最终...
  • 大型网站核心要素之前我们介绍了4个,今天讲讲这最后一个:安全性,从互联网诞生开始,安全威胁就一直伴随着网站的发展,各种web攻击和信息泄露也从未停止,那么我们今天就从下面这几点谈谈网站架构的安全性:网站...
  • Web安全性测试

    千次阅读 2018-12-04 17:28:05
    一、认证与授权 1、认证 即登录功能正常 2、权限 每个用户拥有正确的权限 3、避免未经授权的页面可以直接访问,通过认证和权限(Session),对每个页面有一...4、在手动进行安全测试时,对所有url地址在登录...
  • 关于AIR安全性

    千次阅读 2007-09-09 20:51:00
    关于AIR安全性 AIR环境提供和一般桌面程序类似的,能够访问操作系统资源的能力,AIR程序比起SWF或浏览器中HTML文件来约束更小些,因此可能会出现安全问题,所以正确理解AIR程序的安全模型非常重要。安装向导安全...
  • 接下来为了突出webtours接口安全性很差,这里将cookie中的username的值从cdtaogang改成一个存在的用户nihaoma 再次执行发送请求,查看请求响应web视图,出乎意料的登录成功了,说明此接口安全性太低,实际...
  • 安全性设计之-ip白名单设计

    万次阅读 2018-03-14 22:48:51
    安全性设计之-ip白名单设计 最近一直在做系统的接口开发,接口对于安全性有一定的要求,采用了一定的安全措施,各种加解密,证书手段也采用了。做了这些常见的安全措施之后,考虑到限制非法ip的访问,决定采用ip白...
  • 扩展名“.mdb”可能不正确。 请检查以下的 URL 并确保其拼写正确。 请求的 URL: /topskyweb/topskyadminadmin/file/temp/01sdf.mdb 如果你的程序需要下载mdb文件,只需启用mdb下载即可 启用锁定文件扩展名的下载...
  • SQL数据库安全性

    万次阅读 多人点赞 2012-08-22 14:35:06
    许多Windows系统管理员,还兼职着微软SQL Server数据库管理员(DBA)的身份。另一方面,企业将许多机密的...而在SQL Server中登陆、用户、角色、权限提供了对数据库访问的权限,接下来在数据库安全性上着重分析它们的
  • session的根本原理及安全性

    万次阅读 多人点赞 2014-05-25 09:47:07
    yunnysunny ... 当前文档  删除文档 导出 Markdown 导出 PDF ... 设置 下载离线客户端... session的安全性对于vireio若干问题的解答直播登录验证文档关于淘宝同学接入的若干问题flashvar参数设置flashvar参数设置
  • 提高系统安全性方法详解

    万次阅读 2017-06-30 15:05:46
    软件可靠(softwarereliability)是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。规定的条件是指直接与软件运行相关的使用该软件的计算机系统的状态和软件的输入条件,或统称为软件运行时的外部输入...
  • 安卓应用安全指南 4.6.2 处理文件 规则书 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 遵循以下规则: 4.6.2.1 文件原则上必须创建为私有...
  • 数据库的安全性、完整性、并发控制和恢复from: http://bbs.chinaunix.net/viewthread.php?tid=188100 为了保证数据库...一、 数据库的安全性数据库的安全性是指保护数据库以防止合法的使用所造成的数据泄露、更改或
  • 常见开发安全规避和敏感信息处理

    千次阅读 2017-09-12 17:11:41
    1. 常见开发场景安全开发指南 1.1. 敏感信息使用场景 敏感信息指用户的 身份证号、银行卡号、手机号 等身份信息。重要敏感信息的脱敏规范如下。 敏感信息类型 展示规范 身份证 ...
  • web安全性测试用例

    万次阅读 2016-12-15 12:46:04
    建立整体的威胁模型,测试溢出漏洞、信息泄漏、错误处理、SQL 注入、身份验证和授权错误. 1. 输入验证 客户端验证 服务器端验证(禁用脚本调试,禁用Cookies) 1.输入很大的数(如4,294,967,269),输入很小的数...
  • Golang错误和异常处理正确姿势

    千次阅读 2017-12-08 18:41:18
    很多程序员习惯将一切非正常情况都看做错误,而区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误。从表面上看,一切皆错误的思路更简单,而异常的引入仅仅增加了额外的复杂度。 但事实...
  • 具体来说,协议互通测试主要检测设备正确处理正常协议数据的能力,而协议完整测试则围绕设备正确处理异常协议数据的能力进行检测。从根本上讲,WAPI协议完整检测的推出对于产品的互通和性能提出了更高要求,...
  • 本篇将带领大家进入并发编程领域,说到并发编程,不得提的就是线程安全性。 在构建稳健安全的并发程序的时候,必须正确的使用线程和锁,但这只是实现机制,核心在于对状态访问操作进行管理,尤其是共享状态...
  • 1.数据库安全性概述 (1)为什么要研究数据库的安全性? 问题的提出: 数据库的一大特点是数据可以共享 数据共享必然带来数据库的安全性问题 数据库系统中的数据共享能是无条件的共享 例: 军事秘密、国家机密、...
  • 如何进行安全性测试?

    千次阅读 2014-12-11 23:24:46
    1.功能验证  功能验证是采用软件测试当中的黑盒测试方法,对涉及安全的软件功能,...漏洞扫描器是一种自动检测远程或本地主机安全性弱点的程序。通过使用漏洞扫描器,系统管理员能够发现所维护信息系统存在的安全漏洞
  • 详解HTTPS是如何确保安全性的?

    万次阅读 多人点赞 2016-04-02 11:03:04
    来自: Android梦想特工队 作者: Aaron ...原文连接: http://www.wxtlife.com/2016/03/27/详解https是如何...Https 介绍什么是HttpsHTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全
  • 深入理解Java枚举类型(enum)

    万次阅读 多人点赞 2017-05-13 18:27:14
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) ...深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 337,123
精华内容 134,849
关键字:

安全性类型不正确怎么处理