【安全系类之设计】应用安全相关

最近在做代码安全加固相关的工作,在这里顺便做一个总结

1、系统安全设计

1.1 数据流模型建模

数据流图简介:软件功能模型-数据流图 - 简书

绘图工具(亿图蛮好用它):亿图图示设计软件 - 亿图图示

1.2 STRIDE威胁建模

威胁建模是一个非常有用的工具,它的核心是“像攻击者一样思考”。威胁建模可以在产品设计阶段、架构评审阶段或者产品运行时开展,强迫我们站在攻击者的角度去评估产品的安全性,分析产品中每个组件是否可能被篡改、仿冒,是否可能会造成信息泄露、拒绝攻击。威胁建模的作用更偏向于确保产品架构、功能设计的安全,无法保证编码的安全,但是输出的威胁建模报告中包含了全面的安全需求,这些安全需求不仅包括大的方案设计,如要认证、鉴权、审计,也可以包括安全细节的实现,比如具体的认证方式、密码使用哪种安全算法存储,使用什么方法生成安全随机数等。所以,威胁建模虽不能保证编码的安全,但可以指导研发人员编写出安全的代码,同时也可以辅助渗透测试人员开展安全测试。

STRIDE是微软开发的用于威胁建模的方法和工具。

STRIDE威胁建模的总体流程:

 

 六类威胁:

STRIDE是从攻击者的角度,把威胁划分成6个类别,分别是Spooling(仿冒)、Tampering(篡改)、Repudiation(抵赖)、InformationDisclosure(信息泄露)、Dos(拒绝服务)和Elevation of privilege (权限提升)。

什么划分这6类,这与信息安全三要素和信息安全基本的三个属性相关。

信息安全三要素

信息安全三属性

保密性

认证

完整性

鉴权

可用性

审计

表:六类威胁与信息安全三要素、三属性的对应关系

威胁

安全属性

定义

举例

仿冒(S)

认证

冒充人或物

冒充其他用户账号

篡改(T)

完整性

修改数据或代码

修改订单信息

抵赖(R)

审计

不承认做过某行为

不承认修改行为

信息泄露(I)

保密性

信息被泄露或窃取

用户信息被泄露

拒绝服务(D)

可用性

消耗资源、服务可不用

DDOS导致网站不可用

权限提升(E)

授权

未经授权获取、提升权限

普通用户提升到管理员

随着全球对隐私保护重视程度的加大,隐私安全也成了产品的一个重要威胁,因此STRIDE的6个威胁也添加了一项隐私(Privacy),也就变成了ASTRIDE,A代表Advanced。

具体参考此文:STRIDE威胁建模_dl71181的博客-CSDN博客

2、应用安全

1、web与系统漏洞扫描:

漏洞扫描是指基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测(渗透攻击)行为。

 常见web安全漏洞总结以及防范措施:

https://blog.csdn.net/chenlijian/article/details/115006677?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

 常用进行渗透测试以及漏洞扫描扫描的工具:

一、Web漏洞扫描-AppScan

IBM Security AppScan是一个适合安全专家的Web应用程序和Web服务渗透测试解决方案。
国外商业漏扫产品中,少有的能支持中文的漏扫,运行于Windows平台;
界面清晰、配置简单丰富的中文和产品文档,详细的漏洞说明和修复建议;
支持丰富的扫描报告,包括安全性、行业标准、合规一次性报告。

缺点:扫描速度一般; 在国内漏洞方面(cms)的扫描能力不如国内安全产品; 占用内存大

优点:登录扫描; 准确率最高; 漏洞规则库最全面(在通用漏洞方面(SQL注入 XSS等)功能强大)

二、fortify 静态代码扫描工具

fottify全名叫:Fortify SCA ,是HP的产品 ,是一个静态的、白盒的软件源代码安全测试工具。它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,分析的过程中与它特有的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并给予整理报告。

三、源代码静态分析与安全测试工具(Coverity)

Coverity静态分析软件是最新一代的源代码静态分析工具,技术源自于斯坦福大学,能够快速检测并定位源代码中可能导致产品崩溃、未知行为、安全缺口或者灾难性故障的软件缺陷。Coverity包含900多种质量和安全检测规则,曾协助找到多个0Day漏洞,包括Struts2的远程注入S032,S029,Roller远程攻击,心脏出血漏洞等问题。

Coverity误报率极低,因此研发团队非常愿意接受Coverity的分析结果,缺陷的修复率很高。Coverity具有缺陷分析种类多、分析精度高和误报率低的特点。

四、Web漏洞扫描-awvs

  漏洞扫描速度较快,准确率较高,漏洞规则库较为全面。漏洞验证可查看请求响应代码,但无中文界面。报表功能完整。有多重漏洞的验证工具。

五:主机扫描-nmap

  主要用于端口扫描和主机发现,不能实现web扫描和系统层扫描。对渗透测试起帮助作用。

3、隐私保护

个人隐私保护分类及保护原则:

1、基本定义

隐私(Privacy):指无论在空间、心理或者信息层面上,其他个人、集团或组织不得接近的一种条件或状态。隐私是一种当事人不愿他人知道的个人信息,当事人不愿他人干涉或他人不便干涉的个人私事,以及当事人不愿他人侵入或他人不便侵入的个人领域或个人空间,如私人生活、身体和道德的完整性、不得披露不相关和令人尴尬的事实等。
个人数据(PersonalData):个人数据也称为个人可识别信息(PersonallyIdentifiable Information),指直接通过该数据或者结合该数据与其他的信息,可以识别出自然人的信息。包括姓名、社会保障号、电话号码和电子邮件地址等[2][8]。
敏感个人数据(SensitivePersonal Data):敏感个人数据是个人数据的一个重要子集,指的是涉及数据主体的最私密领域的信息或者一旦泄露可能会给数据主体造成重大不利影响的数据。欧盟等国家和地区法律定义的敏感个人数据包括种族、政治观点、宗教和哲学信仰、工会成员资格、健康和性生活状况等[8]。根据业界最佳实践,敏感个人数据还包括可与自然人身份相关联的银行卡号、身份证号、护照号、口令等[15][16]。敏感个人数据的处理需要更多更严格的保护措施。
数据控制者(DataController):指单独或者与他人共同确定数据处理目的和方式的法人或其他实体[1]。数据控制者对个人数据的处理具有控制权,并且承担个人数据保护的主要法律责任。
数据处理者(DataProcessor):指按照数据控制者要求进行个人数据处理的法人或其他实体(数据控制者的员工不属于数据处理者)。数据处理者必须按照数据控制者的要求对个人数据进行充分的保护。
  2、 隐私保护原则
基于欧盟数据保护指令等法律法规要求,美国联邦贸易委员会以及经济合作发展组织发布的隐私保护指导原则,以及ISO 29100、ISO 29101等国际标准,总结出了xx公司隐私保护的八条基本原则,用于保护用户的个人数据和隐私。
合法性原则数据处理要有合法基础,如数据主体的同意、履行与数据主体之间的合同或执行数据主体所要求的合同所必须、公共利益等。
透明原则需充分告知数据主体处理的数据种类、处理目的、处理方式、存留期限、是否转移至第三方等。
数据主体参与原则数据主体有权访问和修改其个人数据,应当为数据主体提供访问和修改其个人数据的适当方式或渠道。
目的限制性原则:仅能为了具体、明确、合法的目的处理个人数据,不能进行与这些目的不一致的处理。
最小化原则处理的个人数据必须是实现特定目的所相关和必需的,不得超出必要的限度处理个人数据。
准确性原则为实现数据处理的目的,应当保持个人数据的准确性、完整性并及时更新。
安全性原则在个人数据的整个生命周期中,都必须有足够的安全机制,确保个人数据的完整性、保密性和可用性。防止未经授权的访问、销毁、使用、修改和不当披露。

可追溯原则可追溯是指数据相关方(例如数据控制者)有责任采取具体、实际的措施保护个人数据,确保隐私保护可追溯。3、隐私设计基本规则

  
序号
  
规则、建议
设备供应者
数据处理者
数据控制者
来源
1
规则:产品或服务必须在客户资料或界面中提供隐私声明
法律、业界最佳实践
2
规则:对于数据控制者,收集个人数据必须要获得数据主体的授权
法律
3
规则:个人数据收集范围、使用目的不得超出隐私声明
法律
4
规则:产品必须在设计文档中列出所收集的个人数据列表,标明个人数据的收集目的及保护措施
5
规则:在B/S系统中,如果提交的数据中包含个人数据,则禁止使用Get方式提交个人数据
业界最佳实践
6
建议:对于数据控制者,如在数据主体系统上运行的应用软件需要连接到互联网,数据控制者须在连接前告知数据主体,并提供获得数据主体同意的机制
业界最佳实践
7
规则:对于数据控制者和设备供应者,在从数据主体系统中传出包含个人数据的错误报告之前,必须提供机制告知数据主体,并获得其同意
法律、业界最佳实践
8
规则:对于数据控制者,若需要将个人数据用于营销、市场调查,数据控制者必须提供机制提前获取数据主体同意并提供随时撤销同意的机制
法律
9
规则:对于数据控制者和设备供应者,除了法律允许的情况以外,在设置或读取在数据主体系统上的Cookie前(如用于营销或广告),应提供获取数据主体同意及撤销的机制
法律
10
规则:产品须对本地存储的个人数据提供适当的安全保护机制,如认证、授权、加密、日志等
法律、标准
11
规则:对于数据控制者,提供数据主体录入个人数据功能时,必须提供查询和更新相应个人数据的机制
法律
12
建议:产品应对银行卡号的查询操作记录日志
标准、业界最佳实践
13
规则:对于数据控制者,将数据主体个人数据提供给第三方前,必须获得数据主体的授权
法律
14
建议:对于数据处理者,出于定位问题目的,如需将个人数据拿出客户网络,应提供对其中包含的个人数据进行过滤或匿名化处理的机制或指导
/
法律
15
规则:对于数据控制者和处理者,必须提供机制或指导来删除或匿名化超过存留期的个人数据
法律、业界最佳实践
16
规则:对于数据控制者,数据主体撤销同意之后,产品必须禁止继续处理其相应个人数据
法律、业界最佳实践
17
规则:对于数据控制者和处理者,如在设备维修、销毁或云资源回收的场景下,必须提供安全删除的机制或指导,设备供应者不强制要求
标准、业界最佳实践

国内的可以参考华为云的隐私保护白皮书:百度安全验证

备注:常见的网络安全扫描和攻击工具:

1、Nmap (网络映射器):用于扫描端口和地图网络 。

2、Metasploit(渗透测试软件,免费与付费): 漏洞利用工具。

3、John The Ripper: 密码破解工具。

4、OWASP Zed :Web漏洞扫描器。

5、Wireshark :Web漏洞扫描器。

6、Aircrack-ng:密码破解工具。

7、Maltego (免费与付费):  数字取证。

8、AWVS  :WEB漏洞扫描。

9、burpsite :抓包工具。

10、sqlmap : sql注入工具。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
{************************************************************** 浅谈软件安全设计(一) code by 黑夜彩虹 & vxin with almost pure delphi 网站:http://soft.eastrise.net 2007-03-07 --- 转载时请保留作者信息。 **************************************************************} 此CM的设计模式: 1、插入一些花指令 2、写了一些代码迷惑Cracker 3、有简单的Anti_DEDE 和检测调试器 话不多说,请看以下代码: unit main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,strutils; Const C1= 17856; C2= 23589; type TForm1 = class(TForm) Image1: TImage; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} Procedure Anti_DeDe();//检测DEDE反编译器 var DeDeHandle:THandle; i:integer; begin DeDeHandle:=FindWindow(nil,chr($64)+chr($65)+chr($64)+chr($65)); if DeDeHandle0 then begin For i:=1 to 4500 do SendMessage(DeDeHandle,WM_CLOSE,0,0); end; end; Function ABC42():Boolean; //检测调试器; var YInt,NInt:Integer; begin asm mov eax,fs:[30h] movzx eax,byte ptr[eax+2h] or al,al jz @No jnz @Yes @No: mov NInt,1 @Yes: Mov YInt,1 end; if YInt=1 then Result:=True; if NInt=1 then Result:=False; end; function EncryptModule(SourceStr:String;Key:Word;N:Integer):String; var //加密函数 I:Integer; begin SetLength(Result,Length(SourceStr));//利用SetLength函数指定密文长度 //对每一个索引元素进行变换 for I:=1 to Length(SourceStr) do begin Result[I]:=Char(byte(SourceStr[I]) xor (Key Shr N)); Key:= (byte(Result[I]) + Key)*C1+C2; end; end; //==========以下是549的函数,据说没有暴破点,顺便试一试 //========函数作用:动态改变程序运行罗辑 function GetEIP: Integer;//自动生成address的方法 asm mov eax, [esp]; sub eax, 5; //call GetEIP占用5字节 end; function PatchOneItem(PatchItem: String): Boolean; var PatchAddress: Integer; PatchLength: DWord; PatchData: Pointer; PatchDataStr: String; i: Integer; PatchByte: Byte; PID, PHandle: THandle; WriteCount: DWord; begin Result := False; if Length(PatchItem) < 11 then Exit; PatchAddress := StrToInt(\'0x\' + LeftStr(PatchItem, 8)); for i := 1 to Length(PatchItem) do begin if PatchItem[i] \' \' then PatchDataStr := PatchDataStr + PatchItem[i]; end; PatchLength := (Length(PatchDataStr) - 9) div 2; GetMem(PatchData, PatchLength); try for i := 0 to PatchLength - 1 do begin PatchByte := StrToInt(\'0x\'+PatchDataStr[10 + i * 2] + PatchDataStr[10 + i * 2 + 1]); Byte(Pointer(Integer(PatchData) + i)^) := PatchByte; end; GetWindowThreadProcessId(Application.Handle, PID); PHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID); WriteProcessMemory(PHandle, Pointer(PatchAddress), PatchData, PatchLength, WriteCount); CloseHandle(PHandle); finally FreeMem(PatchData, PatchLength); end; Result := PatchLength = WriteCount; end; procedure Patch(PatchFile: String); var PatchItems: TStrings; PatchIndex: Integer; begin if not FileExists(PatchFile) then Exit; PatchItems := TStringList.Create; try PatchItems.LoadFromFile(PatchFile); for PatchIndex := 0 to PatchItems.Count - 1 do begin PatchOneItem(PatchItems[PatchIndex]); end; finally PatchItems.Free; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Anti_DeDe; //检测DEDE,检测到关闭它。 if ABC42 then ExitProcess(0); //检测调试器,终止。 end; procedure TForm1.Button1Click(Sender: TObject); //注册按纽,开始检测 begin //========在这里插入一些花指令 asm jz @Start jnz @Start db 0E8h, 24h, 0, 0 ; db 0, 8Bh, 44h, 24h db 4, 8Bh, 0, 3Dh db 4, 0, 0, 80h db 75h, 8, 8Bh, 64h db 24h, 8, 0EBh, 4 db 58h, 0EBh, 0Ch, 0E9h db 64h, 8Fh, 5, 0 db 0, 0, 0, 74h db 0F3h, 75h, 0F1h, 0EBh db 24h, 64h, 0FFh, 35h db 0, 0, 0, 0 db 0EBh, 12h, 0FFh, 9Ch db 74h, 3, 75h, 1 db 0E9h, 81h, 0Ch, 24h db 0, 1, 0, 0 db 9Dh, 90h, 0EBh, 0F4h db 64h, 89h, 25h, 0 db 0, 0, 0, 0EBh db 0E6h db 0EBh, 1, 0Fh, 31h ; db 0F0h, 0EBh, 0Ch, 33h db 0C8h, 0EBh, 3, 0EBh db 9, 0Fh, 59h, 74h db 5, 75h, 0F8h, 51h db 0EBh, 0F1h db 0B9h, 4, 0, 0 ; @Start: end; if length(edit2.Text)>3 then //比较大于3位 begin //============再写一些骗Cracker if edit2.Text=EncryptModule(Edit1.Text,12345,10) then begin showmessage(\'请重启本软件。\'); //=======还可以再写一些记号,这里我就不写了 end; PatchOneItem(edit2.Text); //真正的比较 showmessage(\'ok\'); //弹出OK对话框 end; end; end.  //====附件为CM,会破解的兄弟可以试试其强度....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值