feat: add cybersecurity topic with 6 subtopics (204 questions)
Deploy Examination / deploy (push) Successful in 7s

New topic group: 网络安全专题 (cybersecurity)
Subtopics:
- web-security: Web 安全基础 (34 questions)
- crypto-basics: 密码学基础 (34 questions)
- buffer-overflow: 缓冲区溢出与漏洞利用 (34 questions)
- os-security: 操作系统安全 (34 questions)
- network-attack: 网络攻防 (34 questions)
- secure-coding: 安全编程实践 (34 questions)

Question types per subtopic:
- single_choice × 20
- true_false × 10
- short_answer × 3
- code_reading × 1

Difficulty range: 1-3 (基础)
This commit is contained in:
2026-09-17 13:33:04 +08:00
parent da9667c265
commit 70e368e235
31 changed files with 4516 additions and 1 deletions
@@ -0,0 +1,68 @@
{
"topic": "os-security",
"type": "code_reading",
"schema_version": "1.0.0",
"generated": "2026-09-17T00:00:00+08:00",
"questions": [
{
"id": "cr-001",
"type": "code_reading",
"difficulty": 3,
"tags": [
"操作系统安全",
"windows安全",
"win32api"
],
"question": "阅读以下 Windows C/C++ 代码,分析其安全行为并回答子问题。",
"language": "c",
"code": "#include <windows.h>\n#include <stdio.h>\n\nint main() {\n HANDLE hToken = NULL;\n HANDLE hRestrictedToken = NULL;\n SID_IDENTIFIER_AUTHORITY sia = SECURITY_MANDATORY_LABEL_AUTHORITY;\n PSID pIntegritySid = NULL;\n TOKEN_MANDATORY_LABEL tml;\n\n // Step 1: Open current process token\n if (!OpenProcessToken(GetCurrentProcess(),\n TOKEN_QUERY | TOKEN_DUPLICATE | TOKEN_ADJUST_DEFAULT,\n &hToken)) {\n printf(\"OpenProcessToken failed: %lu\\n\", GetLastError());\n return 1;\n }\n\n // Step 2: Create a restricted token\n SID_AND_ATTRIBUTES sidToDisable;\n SID_IDENTIFIER_AUTHORITY ntAuth = SECURITY_NT_AUTHORITY;\n AllocateAndInitializeSid(&ntAuth, 2,\n SECURITY_BUILTIN_DOMAIN_RID,\n DOMAIN_ALIAS_RID_ADMINS,\n 0, 0, 0, 0, 0, 0,\n &sidToDisable.Sid);\n sidToDisable.Attributes = 0;\n\n if (!CreateRestrictedToken(hToken,\n DISABLE_MAX_PRIVILEGE,\n 1, &sidToDisable,\n 0, NULL,\n 0, NULL,\n &hRestrictedToken)) {\n printf(\"CreateRestrictedToken failed: %lu\\n\", GetLastError());\n FreeSid(sidToDisable.Sid);\n CloseHandle(hToken);\n return 1;\n }\n\n // Step 3: Set low integrity level\n AllocateAndInitializeSid(&sia, 1,\n SECURITY_MANDATORY_LOW_RID,\n 0, 0, 0, 0, 0, 0, 0,\n &pIntegritySid);\n tml.Label.Attributes = SE_GROUP_INTEGRITY;\n tml.Label.Sid = pIntegritySid;\n\n SetTokenInformation(hRestrictedToken,\n TokenIntegrityLevel,\n &tml,\n sizeof(tml));\n\n // Step 4: Create process with restricted token\n STARTUPINFO si = { sizeof(si) };\n PROCESS_INFORMATION pi;\n if (CreateProcessAsUser(\n hRestrictedToken,\n \"C:\\\\Windows\\\\notepad.exe\",\n NULL, NULL, NULL,\n FALSE,\n CREATE_NEW_CONSOLE,\n NULL, NULL, &si, &pi)) {\n printf(\"Process created with restricted token (PID: %lu)\\n\",\n pi.dwProcessId);\n CloseHandle(pi.hProcess);\n CloseHandle(pi.hThread);\n } else {\n printf(\"CreateProcessAsUser failed: %lu\\n\", GetLastError());\n }\n\n // Cleanup\n FreeSid(pIntegritySid);\n FreeSid(sidToDisable.Sid);\n CloseHandle(hRestrictedToken);\n CloseHandle(hToken);\n return 0;\n}",
"source": null,
"related": [],
"sub_questions": [
{
"index": 1,
"type": "single_choice",
"question": "这段代码中 CreateRestrictedToken() 的 DISABLE_MAX_PRIVILEGE 标志的作用是什么?",
"options": {
"A": "禁用所有用户的登录权限",
"B": "移除令牌中的所有特权,使新令牌几乎没有任何特权",
"C": "仅禁用网络相关的特权",
"D": "将所有特权降低为只读权限"
},
"answer": "B",
"explanation": "DISABLE_MAX_PRIVILEGE 标志告诉 CreateRestrictedToken() 移除源令牌中的所有特权(SeDebugPrivilege、SeBackupPrivilege 等),使得受限令牌几乎没有可用特权。这是实现最低权限运行的核心手段。结合代码中将 Administrators 组 SID 标记为 deny-only(sidToDisable.Attributes = 0),新建的进程既没有管理特权,也无法通过 Administrators 组获得资源访问权限。"
},
{
"index": 2,
"type": "single_choice",
"question": "代码第 3 步将 TokenIntegrityLevel 设置为 SECURITY_MANDATORY_LOW_RID 的效果是:",
"options": {
"A": "使进程可以访问所有低权限用户的文件",
"B": "将进程的完整性级别设为'低',使其无法写入中/高等级的资源(如注册表、文件系统敏感区域)",
"C": "降低进程的 CPU 优先级",
"D": "限制进程只能使用 64MB 内存"
},
"answer": "B",
"explanation": "Windows 的完整性级别机制(Mandatory Integrity Control)为安全对象分配低(Low)、中(Medium)、高(High)、系统(System)等级别。进程默认以中等级别运行。将进程的完整性级别设为 LOW 后,该进程只能写入同样标记为 LOW 完整性的对象,无法修改中等级别的对象(如大多数用户文件和注册表键)。这是 Windows 保护敏感资源不被低信任度进程篡改的重要机制,常见于 IE 的保护模式和 Chrome 的沙箱。"
},
{
"index": 3,
"type": "short_answer",
"question": "综合分析这段代码实现了什么样的安全目标?它采用了哪些安全机制的组合?",
"answer": "这段代码实现了一个最小特权进程创建模式,其安全目标是:即使以管理员身份运行本程序,创建的子进程(notepad.exe)也将以极低权限运行,无法执行特权操作或修改敏感资源。它组合了三种安全机制:1)CreateRestrictedToken + DISABLE_MAX_PRIVILEGE:移除所有特权并禁用 Administrators 组,防止提权和管理资源访问;2)TokenIntegrityLevel 设为 Low:利用强制完整性控制(MIC),阻止进程写入中高等级的安全对象;3)CreateProcessAsUser:使用受限令牌创建新进程,确保子进程从启动起就处于受限状态。这种组合防御(Defense in Depth)策略确保了即使单一机制被绕过,其他机制仍提供保护。",
"keywords": [
"最小特权",
"CreateRestrictedToken",
"完整性级别",
"CreateProcessAsUser",
"Defense in Depth",
"MIC"
],
"scoring_rubric": "满分标准:正确理解代码意图——创建低权限子进程(2分);说明 CreateRestrictedToken 的作用——移除特权和禁用组(2分);说明完整性级别设置的作用——MIC 阻止写入高完整性对象(2分);说明 CreateProcessAsUser 的作用——使用受限令牌启动新进程(1分);总结为组合防御策略(1分)。",
"explanation": ""
}
],
"explanation": ""
}
]
}