安全攻防技能-安全基础概念

相关概念 cybersecurity: 网络空间安全涉及旨在保护设备,网络,程序和数据免受攻击和未经授权的访问的一系列实践,流程和技术; 网络安全不仅可以保护数据,还可以保护存储数据的资源和技术。 information security: 信息安全是关于保护信息的,通常集中在信息的机密性,完整性和可用性方面。 cyberseurity应用于信息技术的安全,wiki上的 Cybersecurity information technology list 几乎列出了wiki上所有网域安全相关信息 wiki相关主题,关于英文的关键字是 Information security, cybersecurity,cyberspace, 后两者者常用户的翻译是网络空间安全, 网络空间。现在的安全相关相关信息用后者搜索到的信息更新一些. 基本原则 安全三元组 CIA triad: Confidentiality, Integrity, Availability Confidentiality 机密性, 隐私信息, 防止被他人看到,保证机密性的例子如在线支付,涉及的用户信息,密码保护等等。 Integrity 完整性, 数据一致、准确、可信的, 不会在传输过程中改变,保证完整性的例子如用户访问控制,文件权限; 版本控制(防止已授权用户误操作); 为了检测由于故障可能发生的数据变化,一些数据设置了校验和, 验证数据完整性。必须有冗余和备份才能将受影响的数据还原成正常状态。 Availabilty 可用性: 保障数据能够被正常访问。保证可用性的例子,比如磁盘的RAID, 应用集群,机房建设,同城异地灾备,通信线路选取多家运营商等等 。 面临挑战 大数据 由于要保护的数据信息量巨大,考虑到冗余和备份, 数据保存的成本会成倍增加。此外,由于大数据更关注于数据收集和对用户信息、行为的分析和理解, 通常缺乏数据监管。比如 Whistleblower Edward Snowden 物联网 物联网中实体和对象会有一个唯一标识符,并且具有网络通讯能力,单个接入设备可能不会引起任何隐私问题, 但是当整理和分析来自多个终端的数据时, 可能就会产生敏感数据。涉及领域如智能玩具,智能家居,智能医疗。 而且物联网设备通常不会经常打补丁,并且会使用默认密码或弱密码及进行配置,如不加保护很可能成为黑客用于攻击的载体。 解决方案 黄金法则: Authentication, Authorization, Audit 黄金法则是系统安全设计的指导规范,是用户在访问使用系统过程中, 应考虑的最基本的安全设计要求。 Authentication 身份认证和识别, 软件系统常用的就是用户, 密码,为了加强强度,后续又增加了多因素认证, 一般是双因素认证(2FA) Authorization 授权确定能再系统中使用资源的范围 Audit 通过日志还原用户的操作,一般是出现问题后的一种防御措施. 安全最佳实践 设立专门防止内部威胁的职位 进行网络钓鱼模拟 确保员工远程访问安全 优先员工的隐私 进行安全相关培训 外包厂商应遵守相同的安全策略并接收培训 建立使用适合的信息安全框架(ISO/IEC27001) 监控用户和文件防止数据丢失 高价值行业(医疗,技术,银行)应防范更高层次的威胁 加强用户密码管理使用SSO,MFAs 特权用户审计 控制访问权限防止数据泄露 检测内部威胁 备份数据 雇佣合同,第三方外包时合同中应写明相关的保密条款 更新定期更新软件和使用系统 指定安全时间响应预案, 定期进行演练 定期进行安全培训及演练 合规要求:HIPAA, PCI, ISO, and DSS 在使用软件,组件之前应考虑相关安全性 指定标准人事流程防止人员离职到的数据流失 可以持续监控用户活动 自动化减少认为操作的错误 GDPR合规要求 使用https提供服务 best practices 通过这个关键字搜索的一些信息, 参见文末链接19 Cybersecurity Best Practices to Protect Your Business ...

2020-06-20 · 3 min · 467 words

功能点分析法整理

由于工作需要,需要在项目立项前都需要进行功能点估算, 为后续计算项目组的的工作效率做准备。目前做了几次估算,在这里整理和总结一下。 我们目前使用的评估的标准参考 IFPUG: ISO/IEC 20926:2009 概述 定义: The function point is a "unit of measurement" to express the amount of business functionality an information system (as a product) provides to a user. 功能点是业务功能的单位, 也就是从用户视角的进行评估, 是可以和用户交流的。对于我现在实施的外包项目来说就是用一种方法和甲方达成共识。相比较与之前的根据经验评估更有依据些。 步骤 1. 功能点应用的分类 开发项目: 从无到有 升级项目: 功能升级 应用项目: 基线评估 2. 识别应用边界 被测应用与用户间的边界。 3. 确认功能点 被测应用与用户间的边界。 数据功能 ILF: 容纳本应用维护的一组业务数据, 控制数据 ELF: 容纳外部应用维护的数据, 对于外部数据来说是他的ILF 处理功能 EI: 处理来自应用外部的的数据, 主要实现ILF的维护, 应用的控制 EO: 通过ILF生成新数据, 已报表,数据流形式送到应用以外 EQ: 请求来自应用外部, 处理过程包含输入,输出, 但输入不进行ILF文件的维护 复杂度 1. 复杂度评估涉及三种元素 RET & DET & FTR DET :用户可识别的,非重复的域 RET :用户可识别的数据的子集合 FTR: 引用文件类型 2. ILF & EIF 的复杂度 ILF & EIF 1 to 19 DET 20 to 50 DET 51 or more DET 1 RET Low Low Average 2 to 5 RET Low Average High 6 or more RET Average High High ILF: Functional Complexity Rating Unadjusted Function Points Low 7 Average 10 High 15 EIF: Functional Complexity Rating Unadjusted Function Points Low 5 Average 7 High 10 3. EI & EO & EQ 的复杂度 EI: 1 to 4 DET 5 to 15 DET 16 or more DET 0 to 1 FTR Low Low Average 2 FTRs Low Average High 3 or more FTRs Average High High EO & EQ 1 to 5 DET 6 to 19 DET 20 or more DET 0 to 1 FTR Low Low Average 2 to 3 FTRs Low Average High 4 or more FTRs Average High High EI & EQ: Functional Complexity Rating Unadjusted Function Points Low 3 Average 4 High 6 EO: Functional Complexity Rating Unadjusted Function Points Low 4 Average 5 High 7 关于复杂度我们实际场景中目前取的都是平均数, 没有对功能点负责度进一步分析,后续会对数据进行统计, 折算出应用的固定的权重。 ...

2020-06-04 · 3 min · 524 words

buddy memory allocation相关整理

概述 wiki上的定义: The buddy memory allocation technique is a memory allocation algorithm that divides memory into partitions to try to satisfy a memory request as suitably as possible. This system makes use of splitting memory into halves to try to give a best fit. 伙伴内存分配技术是一种内存分配算法,它将内存划分为多个分区,以尝试尽可能适当地满足内存请求。 该系统利用将内存分成两半来尝试提供最佳匹配。 算法 伙伴系统有多种形式; 将每个块细分为两个较小块的块是最简单,最常见的一种。 选定块的大小要根据实际情况选取,太小则需要更多的内存记录跟踪内存分配, 太大又容易产生空间浪费,另外,就是如果选择2的次幂单位的话, 最大的块有可能不会覆盖整个内存. 例子 同样是wiki的例子,申请的内存调整了下 Step 64K 64K 64K 64K 64K 64K 64K 64K 64K 64K 64K 64K 64K 64K 64K 64K 1 24 2.1 23 23 2.2 22 22 23 2.3 21 21 22 23 2.4 20 20 21 22 23 2.5 A:20 20 21 22 23 3 A:20 20 B: 21 22 23 4 A:20 C:20 B: 21 22 23 5.1 A:20 C:20 B: 21 21 21 23 5.2 A:20 C:20 B: 21 D: 21 21 23 6 A:20 C:20 21 D: 21 21 23 7.1 A:20 C:20 21 21 21 23 7.2 A:20 C:20 21 22 23 8 20 C:20 21 22 23 9.1 20 20 21 22 23 9.2 21 21 22 23 9.3 22 22 23 9.4 23 23 9.5 24 初始化状态,每块64K, 最大的块包含 24 个块, 一个4阶块. ...

2020-05-29 · 3 min · 482 words

Linux进程内存布局及映射信息

Linux进程内存布局及映射信息 处理器在运行程序时,需要存储器来存放程序和程序使用的数据, 现代操作系统提供了存储器的抽象:虚拟存储器, 使得应用程序来说不用过多的考虑物理存储使用,简化了内存管理. 虚拟存储器 虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件完美的交互,它为每一个进程提供了一个大的、一致的、私有的地址空间. --深入理解计算机系统 在多应用复杂任务场景下,进程直接使用物理内存存在一些问题: 处理数据大小: 应用程序存储的使用,将受制于物理内存大小; 复杂性:应用程序要清楚需要使用的物理地址,何时申请,何时释放,甚至产生碎片后是否要进行整理等; 安全性:如果一个进程不小心改写了另外一个进程也正在使用的内存,进程可能会莫名其妙的挂掉. 虚拟存储器很好的解决了这类问题: 高效使用内存: 将主存看作存储在磁盘上地址空间的高速缓存,主存只保存活动区域 简化存储管理: 虚拟存储提供一致的地址空间 对进程空间的保护: 以免地址空间被其他进程破坏 内存布局、映射的信息 虚拟存储用于管理,最终还是要使用到物理内存, Linux提供了一些接口可以查看,进程(虚拟)内存布局, 虚拟内存与物理内存的映射等。 相关的proc文件 可以通过下面的proc文件查看布局及映射信息 /proc/iomem: 物理内存布局 /proc/pid/maps: 进程虚拟内存布局 /proc/pid/mem: 进程内存查看 /proc/pid/pagemap: 虚拟内存映射到物理内存的信息 /proc/kpagecount: 映射的次数 /proc/kpageflags: 页面的状态 /proc/kpagecgroup: 可以查看每一页对应的cgroup的inode 物理内存使用布局 /proc/iomem 这个文件显示统内存与每个物理设备映射关系, 虚拟机内存物理内存配置了512M 00000000-00000fff : Reserved 00001000-0009ebff : System RAM 0009ec00-0009ffff : Reserved 000a0000-000bffff : PCI Bus 0000:00 000c0000-000c7fff : Video ROM 000ca000-000cafff : Adapter ROM 000cc000-000cffff : PCI Bus 0000:00 000d0000-000d3fff : PCI Bus 0000:00 000d4000-000d7fff : PCI Bus 0000:00 000d8000-000dbfff : PCI Bus 0000:00 000dc000-000fffff : Reserved 000f0000-000fffff : System ROM 00100000-1fedffff : System RAM 0ba00000-0c600de0 : Kernel code 0c800000-0cc16fff : Kernel rodata 0ce00000-0d00a8ff : Kernel data 0d5dc000-0dbfffff : Kernel bss 1fee0000-1fefefff : ACPI Tables 1feff000-1fefffff : ACPI Non-volatile Storage 1ff00000-1fffffff : System RAM ... 第一列:内存地址范围 第二列:对应的内存用途 可以看到含有System RAM的几个段 ...

2020-04-12 · 21 min · 4431 words

内存管理 - 页面大小

内存管理发展阶段 内存(RAM)是计算机一种重要资源, 随着应用越来越复杂,不管存储器有多大,程序都可以把他填满,这就迫使人们不断寻找解决方案去管理它. 内存管理经历的几个阶段; 无存储抽象阶段 (No Memory abstraction) 地址空间 (Address Spaces) 虚拟内存 (Virtual Memory) 无存储抽象阶段: 直接使用物理地址, 简单和划分了用户和操作系统,(驱动程序)使用的内存. 早期的MSDOS采用这种管理方案。 通过每个进程基址寄存器和界限寄存器实现动态重定位,映射到不通的物理内存。通过交换技术和空闲内存管理, 处理内存超载 构建虚拟地址空间,通过MMU(内存管理单元)完成虚拟内存与物理内存的映射。 分页 分页就是出现虚拟内存这个阶段.虚拟地址按照固定大小划分成若干个页面Page, 物理内存中对应为页框 Page Frame (物理内存最小数据单位), 当程序试图访问内存时,MMU根据虚拟地址映射为物理地址. 页面大小 不同处理器体系结构页面大小 体系结构 最小页面 支持大页面 32-bit x86 4 KiB 4 MiB, 2 MiB x86-64 4 KiB 2 MiB, 1 GiB IA-64 (Itanium) 4 KiB 8 KiB, 64 KiB, 256 KiB, 1 MiB, 4 MiB, 16 MiB, 256 MiB Power ISA 4 KiB 64 KiB, 16 MiB, 16 GiB SPARC v8 with SPARC Reference MMU 4 KiB 256 KiB, 16 MiB ARMv7 4 KiB 64 KiB, 1 MiB , 16 MiB UltraSPARC Architecture 2007 8 KiB 64 KiB, 512 KiB , 4 MiB, 32 MiB, 256 MiB, 2 GiB, 16 GiB 页面大小考虑因素(wiki) 页面大小通常有处理器体系结构决定, 目前常用页面大小4KB。选择最佳页面大小要考虑一下几个因素: ...

2020-01-10 · 2 min · 399 words

物理内存管理

物理内存组织方式 SMP: CPU 通过总线访问内存, 称为 SMP 对称多处理器, 采用平坦内存模型, 物理页号连续, 总线成为瓶颈 NUMA: CPU 都有本地内存, 访问内存不用总线, 称为 NUMA 非一致内存访问 采用非连续内存模型,页号不连续 稀疏内存模型 下面以NUMA 为例. 节点 数据结构 pglist_data 表示 NUMA 节点 包括 id,page 数组,起始页号, 总页数, 可用页数 区域 zone 节点分为多个区域 zone ZONE_DMA; ZONE_NORMAL; ZONE_HIGHMEM, ZONE_MOVABLE 数据结构 zone 表示 区域 包含第一个页页号; 区域总页数; 区域实际页数; 被伙伴系统管理的页数; 用 per_cpu_pageset 区分冷热页(热页, 被 CPU 缓存的页) 页 数据结构 page 表示, 分配方式: 匿名页分配; 分配小块内存: Linux 采用 slab allocator 技术; 申请一整页, 分为多个小块存储池, 用队列维护其状态(较复杂) slub allocator 更简单 slob allocator 用于嵌入式 page 记录: 第一个 slab 对象; 空闲列表; 待释放列表 页分配 使用伙伴系统 进行管理分配 Linux 把空闲页分组为 11 个页块链表, 链表管理大小不同的页块(页大小 2^i * 4KB)

2019-11-03 · 1 min · 93 words

进程内存布局

内存管理包含: 物理内存管理 虚拟内存管理 物理内存与虚拟内存的映射 除了内存管理模块, 其他模块都使用虚拟地址(包括内核) 虚拟内存空间包含: 内核空间(高地址) 用户空间(低地址) +--------------+ | kernel space | high address +--------------+ ^ | stack | | +--------------+ | ^ | | user | | space | | v +--------------+ | heap | +--------------+ | bss | +--------------+ | | data | | +--------------+ | | text | v +--------------+ low address 空间存放内容 用户空间:多个进程看到的用户空间是独立的 从低到高布局为: 代码段 数据段 BSS段(未初始化静态变量) 堆 内存映射段 栈地址空间段 内核空间: 多个进程看到同一内核空间, 但内核栈每个进程不一样 内核代码也仅能访问内核空间 内核也有内核代码段, DATA 段, 和 BSS 段; 位于内核空间低地址 内核代码也是 ELF 格式, 只是所处的位置不同 内存映射 分段 虚拟地址 = 段选择子(段寄存器) + 段内偏移量 段选择子 = 段号(段表索引) + 标识位 段表 = 物理基地址 + 段界限(偏移量范围) + 特权等级 段表称为段描述符表, 放在全局标识符表中 Linux 将段基地址都初始化为 0, 不用于地址映射 Linux 分段功能主要用于权限检查 分页 物理内存被换分为大小固定(4KB)的页, 物理页可在内存与硬盘间换出/换入 ...

2019-10-25 · 1 min · 163 words

CMMI3相关

概述 公司近期进行CMMI3, 公司目标很明确:招投标用的,过程中准备了一些材料,对于我们外包工作来说,还是有一定指导作用的。 CMMI 概述 集成的能力成熟度模型(CMMI)是成熟度模型和相关产品的集成框架,其中集成了系统开发活动中不可分割的两个关键学科:软件工程和系统工程。 流程管理和质量改进概念在产品开发,维护和采购中的常识性应用 一组最佳做法 公共开发指南 组织改进的模型 CMMI涉及三个感兴趣的领域: 产品和服务开发-CMMI for Development(CMMI-DEV), 服务的建立,管理,—服务的CMMI(CMMI-SVC),以及 产品和服务获取— CMMI for Acquisition(CMMI-ACQ)。 在2.0版中,这三个区域(以前每个区域都有一个单独的模型)被合并为一个模型。 CMMI由行业,政府和CMU的软件工程学院(SEI)组成的小组开发。 CMMI模型为开发或改进满足组织业务目标的流程提供了指导。 CMMI模型也可以用作评估组织流程成熟度的框架。 到2013年1月,整个CMMI产品套件已从SEI转移到卡耐基梅隆大学新成立的组织CMMI研究所。 核心过程 版本1.3中CMMI领域共有的17个CMMI核心过程领域。 缩写 名称 领域 成熟度 OT Organizational Training Process Management 3 OPP Organizational Process Performance Process Management 4 OPM Organizational Performance Management Process Management 5 OPF Organizational Process Focus Process Management 3 OPD Organizational Process Definition Process Management 3 RSKM Risk Management Project Management 3 REQM Requirements Management Project Management 2 QPM Quantitative Project Management Project Management 4 PP Project Planning Project Management 2 PMC Project Monitoring and Control Project Management 2 IPM Integrated Project Management Project Management 3 SAM Supplier Agreement Management Support 2 PPQA Process and Product Quality Assurance Support 2 MA Measurement and Analysis Support 2 DAR Decision Analysis and Resolution Support 3 CM Configuration Management Support 2 CAR Causal Analysis and Resolution Support 5 访谈 我们访谈主要涵盖 PP, RSKM, IPM, PMC, 我们是驻场实施,实施流程也是符合甲方要求的,甲方是通过CMMI4的,所以我们的项目实施过程还是蛮符合标准的 :) ...

2019-10-14 · 1 min · 187 words

Linux进程调度

调度定义 wiki上的关于scheduler的定义: In computing, scheduling is the method by which work is assigned to resources that complete the work. The work may be virtual computation elements such as threads, processes or data flows, which are in turn scheduled onto hardware resources such as processors, network links or expansion cards. 在计算机领域里,调度是一种将任务分配给完成任务的资源的方法。 任务可能是虚拟计算元素,例如线程,进程或数据流,这些虚拟计算元素又被安排在硬件资源(例如处理器,网络链接或扩展卡)上。 任务的分类: 对于要调度的任务分类: 按照依赖资源: CPU-bound: 任务处理效率受CPU处理速度的影响; I/O-bound: 任务处理效率受I/O处理速度的影响; 按照执行特点: Interactive: 交互式,如shell. Batch: 后台服务式,不需要与用户交互的 ,如数据库引擎. Real-Time: 及时响应式. 调度目标 所有系统 ...

2019-10-03 · 18 min · 3664 words

Linux内核参数sysctl_sched_child_runs_first

概述 Linux2.6.23版本引入了CFS调度器,通过sched_child_runs_first设置是否子进程优先运行, 下面是 SUSE Documentation 关于此参数的说明: A freshly forked child runs before the parent continues execution. Setting this parameter to 1 is beneficial for an application in which the child performs an execution after fork. For example make -j performs better when sched_child_runs_first is turned off. The default value is 0. make -j<cpu个数>支持并行编译 设置这个参数后子进程会优先在父进程前执行. 验证 使用The Linux Programming Interface中的例子: fork_whos_on_first.c, fork_whos_on_first.count.awk 来验证一下: ... int main (int argc, char *argv[]) { ... for (j = 0; j < numChildren; j++) { switch (childPid = fork ()) { case -1: exit(-1); case 0: getpid(); printf ("%d child\n", j); _exit (EXIT_SUCCESS); default: getpid(); printf ("%d parent\n", j); wait (NULL); /* Wait for child to terminate */ break; } } exit (EXIT_SUCCESS); } sysctl -w kernel.sched_child_runs_first=1 ./fork_whos_on_first 10000 > fork.txt awk -f ./fork_whos_on_first.count.awk fork.txt All done parent 99983 99.98% child 17 0.02% 虽然设置了 sched_child_runs_first, 并不是子进程每次都能先于父进程被调度。 ...

2019-09-06 · 5 min · 901 words