Spaces:
Runtime error
Runtime error
Sukmadi commited on
Commit ·
b11c986
1
Parent(s): 9f83d0e
save commit
Browse files- app.py +4 -18
- chunks.txt +275 -0
- generator.py +11 -11
- test/context.md +22 -283
- test/mcq_output.json +200 -0
- test/oop_mcq_output.json +188 -0
- test/raw_resp.json +12 -12
- test/text_chunks.md +1 -1
- utils.py +13 -2
app.py
CHANGED
|
@@ -9,7 +9,7 @@ from pydantic import BaseModel
|
|
| 9 |
|
| 10 |
# Import the user's RAGMCQ implementation
|
| 11 |
from generator import RAGMCQ
|
| 12 |
-
from utils import
|
| 13 |
|
| 14 |
app = FastAPI(title="RAG MCQ Generator API")
|
| 15 |
|
|
@@ -103,17 +103,11 @@ async def generate_saved_endpoint(
|
|
| 103 |
# don't fail the whole request for a validation error — return generator output and note the error
|
| 104 |
validation_report = {"error": f"Validation failed: {e}"}
|
| 105 |
|
| 106 |
-
|
| 107 |
-
save_to_local('test/mcq_output.json', content={"mcqs": mcqs, "validation": validation_report})
|
| 108 |
-
token_record = get_token_count_record()
|
| 109 |
|
| 110 |
-
|
| 111 |
-
for record, value in token_record.items():
|
| 112 |
-
print(f'{record}:{value}', '\n')
|
| 113 |
|
| 114 |
-
reset_token_count()
|
| 115 |
|
| 116 |
-
return {"mcqs": mcqs, "validation": validation_report}
|
| 117 |
|
| 118 |
@app.post("/generate", response_model=GenerateResponse)
|
| 119 |
async def generate_endpoint(
|
|
@@ -179,16 +173,8 @@ async def generate_endpoint(
|
|
| 179 |
# don't fail the whole request for a validation error — return generator output and note the error
|
| 180 |
validation_report = {"error": f"Validation failed: {e}"}
|
| 181 |
|
| 182 |
-
print("Save result to test/mcq_output.json")
|
| 183 |
-
save_to_local('test/mcq_output.json', content={"mcqs": mcqs, "validation": validation_report})
|
| 184 |
-
token_record = get_token_count_record()
|
| 185 |
-
|
| 186 |
-
print("Token Record:")
|
| 187 |
-
for record, value in token_record.items():
|
| 188 |
-
print(f'{record}:{value}', '\n')
|
| 189 |
|
| 190 |
-
|
| 191 |
-
# save_logs(token_record)
|
| 192 |
|
| 193 |
return {"mcqs": mcqs, "validation": validation_report}
|
| 194 |
|
|
|
|
| 9 |
|
| 10 |
# Import the user's RAGMCQ implementation
|
| 11 |
from generator import RAGMCQ
|
| 12 |
+
from utils import log_pipeline
|
| 13 |
|
| 14 |
app = FastAPI(title="RAG MCQ Generator API")
|
| 15 |
|
|
|
|
| 103 |
# don't fail the whole request for a validation error — return generator output and note the error
|
| 104 |
validation_report = {"error": f"Validation failed: {e}"}
|
| 105 |
|
| 106 |
+
log_pipeline('test/mcq_output.json', content={"mcqs": mcqs, "validation": validation_report})
|
|
|
|
|
|
|
| 107 |
|
| 108 |
+
return {"mcqs": mcqs, "validation": validation_report}
|
|
|
|
|
|
|
| 109 |
|
|
|
|
| 110 |
|
|
|
|
| 111 |
|
| 112 |
@app.post("/generate", response_model=GenerateResponse)
|
| 113 |
async def generate_endpoint(
|
|
|
|
| 173 |
# don't fail the whole request for a validation error — return generator output and note the error
|
| 174 |
validation_report = {"error": f"Validation failed: {e}"}
|
| 175 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
|
| 177 |
+
log_pipeline('test/mcq_output.json', content={"mcqs": mcqs, "validation": validation_report})
|
|
|
|
| 178 |
|
| 179 |
return {"mcqs": mcqs, "validation": validation_report}
|
| 180 |
|
chunks.txt
CHANGED
|
@@ -210,3 +210,278 @@ tức là một hàm véc tơ phụthuộc vào hai tham số u, v. 15
|
|
| 210 |
|
| 211 |
|
| 212 |
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 210 |
|
| 211 |
|
| 212 |
1
|
| 213 |
+
**AI VIETNAM** **aivietnam.edu.vn**
|
| 214 |
+
|
| 215 |
+
|
| 216 |
+
Cảhai biến age ởlần in đầu tiên đều là biến cục bộvì Python sẽưu tiên tìm biến cục bộtrước,
|
| 217 |
+
ởđây là đối số2 truyền vào age. Vì ta không định nghĩa self.age, nên khi gọi, Python sẽtìm đến
|
| 218 |
+
thứtựtiếp theo là biến Class. Chính vì vậy, ta sẽin ra được kết quảage = 1
|
| 219 |
+
|
| 220 |
+
|
| 221 |
+
**1.1.2** **Biến toàn cục (Global)**
|
| 222 |
+
|
| 223 |
+
|
| 224 |
+
Biến toàn cục được khai báo bên ngoài hàm hoặc class, sửdụng được trên toàn chương trình
|
| 225 |
+
nhưng nên hạn chếđểtránh gây khó kiểm soát. **Không khuyến khích:**
|
| 226 |
+
|
| 227 |
+
|
| 228 |
+
1 `counter = 0` `# Global variable`
|
| 229 |
+
|
| 230 |
+
|
| 231 |
+
2
|
| 232 |
+
|
| 233 |
+
|
| 234 |
+
3 `class MyClass:`
|
| 235 |
+
|
| 236 |
+
4 `def increment(self):`
|
| 237 |
+
|
| 238 |
+
|
| 239 |
+
5 `global counter`
|
| 240 |
+
|
| 241 |
+
|
| 242 |
+
6 `counter += 1`
|
| 243 |
+
|
| 244 |
+
|
| 245 |
+
**Khuyến khích:**
|
| 246 |
+
|
| 247 |
+
|
| 248 |
+
1 `class MyClass:`
|
| 249 |
+
|
| 250 |
+
|
| 251 |
+
2 `counter = 0` `# Class attribute`
|
| 252 |
+
|
| 253 |
+
|
| 254 |
+
3
|
| 255 |
+
|
| 256 |
+
|
| 257 |
+
4 `def increment(self):`
|
| 258 |
+
|
| 259 |
+
|
| 260 |
+
5 `MyClass.counter += 1`
|
| 261 |
+
|
| 262 |
+
### **2 Động lực cho sựra đời của OOP**
|
| 263 |
+
|
| 264 |
+
|
| 265 |
+
Trong thực tế, chúng ta luôn tìm cách mô hình hóa các thực thểthực tếthành các đối tượng số
|
| 266 |
+
hóa. Từnhu cầu quản lý và tổchức các thực thểnày, lập trình hướng đối tượng ra đời đểđơn
|
| 267 |
+
giản hóa và tối ưu hóa việc xây dựng phần mềm. Hãy tưởng tượng một thếgiới mạng xã hội, nơi mỗi người dùng chính là một đối tượng (object). Những thông tin như ngày sinh, giới tính, sốđiện thoại...
|
| 268 |
+
ập
|
| 269 |
+
được. - **Biến** **`private`** là thông tin tuyệt mật – chỉlớp khai báo nó mới có quyền truy cập. Lớp
|
| 270 |
+
con không thể“đọc nhật ký” hay can thiệp trực tiếp vào những gì cha mẹkhông cho phép. - **Biến** **`protected`** thì đặc biệt hơn – đây là những “di sản” được truyền lại, chỉdành cho
|
| 271 |
+
các lớp con và không ai khác ngoài hệthống kếthừa được phép sửdụng. Sựphân cấp này giúp bảo vệdữliệu và giữcho hệthống kếthừa hoạt động có tổchức. 7
|
| 272 |
+
**AI VIETNAM** **aivietnam.edu.vn**
|
| 273 |
+
|
| 274 |
+
|
| 275 |
+
Cảhai biến age ởlần in đầu tiên đều là biến cục bộvì Python sẽưu tiên tìm biến cục bộtrước,
|
| 276 |
+
ởđây là đối số2 truyền vào age. Vì ta không định nghĩa self.age, nên khi gọi, Python sẽtìm đến
|
| 277 |
+
thứtựtiếp theo là biến Class. Chính vì vậy, ta sẽin ra được kết quảage = 1
|
| 278 |
+
|
| 279 |
+
|
| 280 |
+
**1.1.2** **Biến toàn cục (Global)**
|
| 281 |
+
|
| 282 |
+
|
| 283 |
+
Biến toàn cục được khai báo bên ngoài hàm hoặc class, sửdụng được trên toàn chương trình
|
| 284 |
+
nhưng nên hạn chếđểtránh gây khó kiểm soát. **Không khuyến khích:**
|
| 285 |
+
|
| 286 |
+
|
| 287 |
+
1 `counter = 0` `# Global variable`
|
| 288 |
+
|
| 289 |
+
|
| 290 |
+
2
|
| 291 |
+
|
| 292 |
+
|
| 293 |
+
3 `class MyClass:`
|
| 294 |
+
|
| 295 |
+
4 `def increment(self):`
|
| 296 |
+
|
| 297 |
+
|
| 298 |
+
5 `global counter`
|
| 299 |
+
|
| 300 |
+
|
| 301 |
+
6 `counter += 1`
|
| 302 |
+
|
| 303 |
+
|
| 304 |
+
**Khuyến khích:**
|
| 305 |
+
|
| 306 |
+
|
| 307 |
+
1 `class MyClass:`
|
| 308 |
+
|
| 309 |
+
|
| 310 |
+
2 `counter = 0` `# Class attribute`
|
| 311 |
+
|
| 312 |
+
|
| 313 |
+
3
|
| 314 |
+
|
| 315 |
+
|
| 316 |
+
4 `def increment(self):`
|
| 317 |
+
|
| 318 |
+
|
| 319 |
+
5 `MyClass.counter += 1`
|
| 320 |
+
|
| 321 |
+
### **2 Động lực cho sựra đời của OOP**
|
| 322 |
+
|
| 323 |
+
|
| 324 |
+
Trong thực tế, chúng ta luôn tìm cách mô hình hóa các thực thểthực tếthành các đối tượng số
|
| 325 |
+
hóa. Từnhu cầu quản lý và tổchức các thực thểnày, lập trình hướng đối tượng ra đời đểđơn
|
| 326 |
+
giản hóa và tối ưu hóa việc xây dựng phần mềm. Hãy tưởng tượng một thếgiới mạng xã hội, nơi mỗi người dùng chính là một đối tượng (object). Những thông tin như ngày sinh, giới tính, sốđiện thoại...
|
| 327 |
+
es a function →Output: Hi Alice`
|
| 328 |
+
|
| 329 |
+
|
| 330 |
+
2. **Stateful function** : Hàm có thểghi nhớtrạng thái bên trong. 1 `class Counter:`
|
| 331 |
+
|
| 332 |
+
|
| 333 |
+
2 `def __init__(self):`
|
| 334 |
+
|
| 335 |
+
|
| 336 |
+
3 `self.count = 0`
|
| 337 |
+
|
| 338 |
+
|
| 339 |
+
4
|
| 340 |
+
|
| 341 |
+
|
| 342 |
+
5 `def __call__(self):`
|
| 343 |
+
|
| 344 |
+
|
| 345 |
+
6 `self.count += 1`
|
| 346 |
+
|
| 347 |
+
|
| 348 |
+
7 `return self.count`
|
| 349 |
+
|
| 350 |
+
|
| 351 |
+
8
|
| 352 |
+
|
| 353 |
+
|
| 354 |
+
9 `counter = Counter()`
|
| 355 |
+
|
| 356 |
+
|
| 357 |
+
10
|
| 358 |
+
|
| 359 |
+
|
| 360 |
+
11 `print(counter())` `# 1`
|
| 361 |
+
|
| 362 |
+
12 `print(counter())` `# 2`
|
| 363 |
+
|
| 364 |
+
13 `print(counter())` `# 3`
|
| 365 |
+
|
| 366 |
+
|
| 367 |
+
Mỗi lần gọi `counter()` đều ghi nhớtrạng thái trước đó và cộng dồn lên, không giống như
|
| 368 |
+
các phương thức thông thường vốn không lưu trạng thái giữa các lần gọi. 3. **Decorator hoặc Callback handler** : (nâng cao cần tìm hiểu thêm). ## **Phần II: Các tính chất cơ bản trong Object-** **Oriented Programming**
|
| 369 |
+
|
| 370 |
+
### **5** **Delegation (Ủy quyền)**
|
| 371 |
+
|
| 372 |
+
|
| 373 |
+
Delegation (ủy quyền) trong lập trình hướng đối tượng là một kỹthuật trong đó một đối tượng
|
| 374 |
+
ủy thác trách nhiệm thực hiện một hành vi cụthểcho một đối tượng khác. Thay vì kếthừa trực
|
| 375 |
+
|
| 376 |
+
|
| 377 |
+
5
|
| 378 |
+
**AI VIETNAM** **aivietnam.edu.vn**
|
| 379 |
+
|
| 380 |
+
|
| 381 |
+
Trong Python, `__call__` là một **phương thức đặc biệt** (giống như `__init__`, `__str__`, v.v.)
|
| 382 |
+
được sửdụng khi một đối tượng cần hành xửgiống như một hàm. Nếu một lớp định nghĩa
|
| 383 |
+
`__call__`, thì các _instance_ của lớp đó có thểđược gọi như một hàm thực sự. Phương thức `__call__()` thường được dùng trong ba tình huống phổbiến:
|
| 384 |
+
|
| 385 |
+
|
| 386 |
+
1. **Function factory** : Tạo ra các đối tượng có thểxửlý logic như một hàm. 1 `class SayHi:`
|
| 387 |
+
|
| 388 |
+
2 `def __init__(self, name):`
|
| 389 |
+
|
| 390 |
+
|
| 391 |
+
3 `self.name = name`
|
| 392 |
+
|
| 393 |
+
|
| 394 |
+
4
|
| 395 |
+
|
| 396 |
+
|
| 397 |
+
5 `def hello(self):`
|
| 398 |
+
|
| 399 |
+
6 `print(f'Hello {self.name}')`
|
| 400 |
+
|
| 401 |
+
|
| 402 |
+
7
|
| 403 |
+
|
| 404 |
+
|
| 405 |
+
8 `def __call__(self, prefix):`
|
| 406 |
+
|
| 407 |
+
9 `print(f'{prefix} {self.name}')`
|
| 408 |
+
|
| 409 |
+
|
| 410 |
+
10
|
| 411 |
+
|
| 412 |
+
|
| 413 |
+
11 `obj = SayHi("Alice")`
|
| 414 |
+
|
| 415 |
+
12 `obj.hello()`
|
| 416 |
+
|
| 417 |
+
13 `obj("Hi")` `# __call__ make it becomes a function →Output: Hi Alice`
|
| 418 |
+
|
| 419 |
+
|
| 420 |
+
2. **Stateful function** : Hàm có thểghi nhớtrạng thái bên trong.
|
| 421 |
+
### **4.4** **Các lỗhổng được khai thác**
|
| 422 |
+
|
| 423 |
+
#### **4.4.1 Command injection trong tính năng chuẩn đoán** **ping**
|
| 424 |
+
|
| 425 |
+
Lỗhổng này có mã CVE là **CVE-2024-51186** [13]. Đây là lỗhổng trong
|
| 426 |
+
dịch vụ **ncc2** của thiết bịnày. Trong dịch vụ **ncc2** này, có một endpoint xử
|
| 427 |
+
lý CGI request là **ping.ccp** . Endpoint này cho phép chuẩn đoán các thiết
|
| 428 |
+
bịqua mạng bằng cách "ping"các thiết bịđó. Dưới đây là ảnh giao diện cho
|
| 429 |
+
phép người dùng tương tác với tính năng này.
|
| 430 |
+
|
| 431 |
+
|
| 432 |
+
18
|
| 433 |
+
w.theguardian.com/technology/2017/feb/28/cloudpets-data-breach-leaks-details-of-500000-children-and-adults/)
|
| 434 |
+
[cloudpets-data-breach-leaks-details-of-500000-children-and-adults/.](https://www.theguardian.com/technology/2017/feb/28/cloudpets-data-breach-leaks-details-of-500000-children-and-adults/)
|
| 435 |
+
|
| 436 |
+
|
| 437 |
+
33
|
| 438 |
+
# **Chương 2** **Các mối đe dọa vềbảo mật** **trong IoT**
|
| 439 |
+
|
| 440 |
+
Hệsinh thái IoT đã tạo ra một môi trường đe dọa đa tầng. Các mối đe dọa
|
| 441 |
+
vềmặt bảo mật trong IoT có thểđược được phân loại theo các tầng khác
|
| 442 |
+
nhau trong kiến trúc IoT, đồng thời các phương thức khai thác có thểcó các
|
| 443 |
+
hậu quảkhác nhau.
|
| 444 |
+
|
| 445 |
+
### **2.1** **Mối đe dọa tầng cảm biến**
|
| 446 |
+
|
| 447 |
+
#### **2.1.1 Khai thác thiết bịvật lý**
|
| 448 |
+
|
| 449 |
+
|
| 450 |
+
Nhiều nhà sản xuất thiết bịIoT thường đểlộchân UART/JTAG hoặc bật
|
| 451 |
+
chếđộconsole gỡlỗi ngay trên thiết bịthương mại. Khi có quyền truy cập vật
|
| 452 |
+
lý, kẻtấn công có thểtrích xuất dữliệu từbộnhớflash, trích xuất firmware,
|
| 453 |
+
chiếm quyền shell root hoặc thậm chí cài đặt firmware có chứa mã độc. [3]
|
| 454 |
+
|
| 455 |
+
#### **2.1.2 Tấn công side-channel**
|
| 456 |
+
|
| 457 |
+
|
| 458 |
+
Bằng cách theo dõi mức tiêu thụđiện năng hay bức xạđiện từcủa thiết bị
|
| 459 |
+
khi thực hiện các phép toán mã hóa và giải mã, người tấn công có thểchiết
|
| 460 |
+
xuất khóa bí mật dùng đểmã hóa/giải mã hoặc trộm cắp dữliệu nhạy cảm
|
| 461 |
+
bên trong. [4]
|
| 462 |
+
|
| 463 |
+
#### **2.1.3 Chỉnh sửa firmware**
|
| 464 |
+
|
| 465 |
+
|
| 466 |
+
Một người tấn công có thểlợi dụng việc thiếu cơ chếxác thực chặt chẽtrong
|
| 467 |
+
quá trình cập nhật firmware qua OTA (Over-The-Air). Họcó thểkhiến thiết
|
| 468 |
+
|
| 469 |
+
|
| 470 |
+
6
|
| 471 |
+
w.theguardian.com/technology/2017/feb/28/cloudpets-data-breach-leaks-details-of-500000-children-and-adults/)
|
| 472 |
+
[cloudpets-data-breach-leaks-details-of-500000-children-and-adults/.](https://www.theguardian.com/technology/2017/feb/28/cloudpets-data-breach-leaks-details-of-500000-children-and-adults/)
|
| 473 |
+
|
| 474 |
+
|
| 475 |
+
33
|
| 476 |
+
### **4.4** **Các lỗhổng được khai thác**
|
| 477 |
+
|
| 478 |
+
#### **4.4.1 Command injection trong tính năng chuẩn đoán** **ping**
|
| 479 |
+
|
| 480 |
+
Lỗhổng này có mã CVE là **CVE-2024-51186** [13]. Đây là lỗhổng trong
|
| 481 |
+
dịch vụ **ncc2** của thiết bịnày. Trong dịch vụ **ncc2** này, có một endpoint xử
|
| 482 |
+
lý CGI request là **ping.ccp** . Endpoint này cho phép chuẩn đoán các thiết
|
| 483 |
+
bịqua mạng bằng cách "ping"các thiết bịđó. Dưới đây là ảnh giao diện cho
|
| 484 |
+
phép người dùng tương tác với tính năng này.
|
| 485 |
+
|
| 486 |
+
|
| 487 |
+
18
|
generator.py
CHANGED
|
@@ -104,7 +104,7 @@ class RAGMCQ:
|
|
| 104 |
sentences = re.split(r'(?<=[\.\?\!])\s+', text)
|
| 105 |
chunks = []
|
| 106 |
cur = ""
|
| 107 |
-
|
| 108 |
for s in sentences:
|
| 109 |
if len(cur) + len(s) + 1 <= max_chars:
|
| 110 |
cur += (" " if cur else "") + s
|
|
@@ -682,19 +682,19 @@ class RAGMCQ:
|
|
| 682 |
max_attempts = n_questions * 4
|
| 683 |
while qcount < n_questions and attempts < max_attempts:
|
| 684 |
attempts += 1
|
| 685 |
-
#
|
| 686 |
-
seed_idx = random.randrange(len(texts))
|
| 687 |
-
chunk = texts[seed_idx]
|
| 688 |
sents = re.split(r'(?<=[\.\?\!])\s+', chunk)
|
| 689 |
-
|
| 690 |
-
|
| 691 |
-
|
| 692 |
-
|
| 693 |
-
|
| 694 |
-
|
| 695 |
-
seed_sent = chunk[:200]
|
| 696 |
query = f"Create questions about: {seed_sent}"
|
| 697 |
|
|
|
|
| 698 |
# retrieve top_k chunks from the same file (restricted by filename filter)
|
| 699 |
retrieved = self._retrieve_qdrant(query=query, collection=collection, filename=filename, top_k=top_k)
|
| 700 |
context_parts = []
|
|
|
|
| 104 |
sentences = re.split(r'(?<=[\.\?\!])\s+', text)
|
| 105 |
chunks = []
|
| 106 |
cur = ""
|
| 107 |
+
|
| 108 |
for s in sentences:
|
| 109 |
if len(cur) + len(s) + 1 <= max_chars:
|
| 110 |
cur += (" " if cur else "") + s
|
|
|
|
| 682 |
max_attempts = n_questions * 4
|
| 683 |
while qcount < n_questions and attempts < max_attempts:
|
| 684 |
attempts += 1
|
| 685 |
+
# create a seed query: pick a random chunk, pick a sentence from it
|
| 686 |
+
seed_idx = random.randrange(len(self.texts))
|
| 687 |
+
chunk = self.texts[seed_idx]
|
| 688 |
sents = re.split(r'(?<=[\.\?\!])\s+', chunk)
|
| 689 |
+
candidate = [s for s in sents if len(s.strip()) > 20]
|
| 690 |
+
if candidate:
|
| 691 |
+
seed_sent = random.choice(candidate)
|
| 692 |
+
else:
|
| 693 |
+
stripped = chunk.strip()
|
| 694 |
+
seed_sent = (stripped[:200] if stripped else "[no text available]")
|
|
|
|
| 695 |
query = f"Create questions about: {seed_sent}"
|
| 696 |
|
| 697 |
+
|
| 698 |
# retrieve top_k chunks from the same file (restricted by filename filter)
|
| 699 |
retrieved = self._retrieve_qdrant(query=query, collection=collection, filename=filename, top_k=top_k)
|
| 700 |
context_parts = []
|
test/context.md
CHANGED
|
@@ -1,299 +1,38 @@
|
|
| 1 |
-
[page
|
| 2 |
|
|
|
|
| 3 |
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
|
|
|
|
|
|
| 7 |
|
| 8 |
|
|
|
|
| 9 |
|
| 10 |
-
|
| 11 |
-
�����
|
| 12 |
|
| 13 |
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
p 3 ( t ) p 1 ( t )
|
| 16 |
-
����� q 3 ( t ) q 1 ( t )
|
| 17 |
|
|
|
|
| 18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
|
| 20 |
-
,
|
| 21 |
-
�����
|
| 22 |
|
|
|
|
|
|
|
| 23 |
|
| 24 |
|
| 25 |
-
|
| 26 |
-
|
| 27 |
|
| 28 |
|
| 29 |
-
|
| 30 |
-
�����
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
= [d]
|
| 35 |
-
|
| 36 |
-
dt
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
= ... p 2 ( t ) p 3 ( t )
|
| 40 |
-
������ q 2 ( t ) q 3 ( t )
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
�
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
p 3 ( t ) p 1 [′] [(] [t] [)]
|
| 49 |
-
|
| 50 |
-
�����, ����� q 3 ( t ) q 1 [′] [(] [t] [)]
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
p 3 [′] [(] [t] [)] p 1 ( t )
|
| 54 |
-
|
| 55 |
-
�����, ����� q 3 [′] [(] [t] [)] q 1 ( t )
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
p 1 ( t ) p 2 [′] [(] [t] [)]
|
| 60 |
-
|
| 61 |
-
�����, ����� q 1 ( t ) q 2 [′] [(] [t] [)]
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
p 1 [′] [(] [t] [)] p 2 ( t )
|
| 65 |
-
|
| 66 |
-
�����, ����� q 1 [′] [(] [t] [)] q 2 ( t )
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
������
|
| 71 |
-
|
| 72 |
-
������
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
=
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
+
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
p 2 ( t ) p 3 [′] [(] [t] [)]
|
| 84 |
-
������ q 2 ( t ) q 3 [′] [(] [t] [)]
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
p 2 [′] [(] [t] [)] p 3 ( t )
|
| 88 |
-
������ q 2 [′] [(] [t] [)] q 3 ( t )
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
[(] [t] [)] + [d] [−→] [p] [(] [t] [)]
|
| 94 |
-
|
| 95 |
-
dt dt
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
[(] [t] [)]
|
| 101 |
-
= [−→] p ( t ) ∧ [d] [−→] [q]
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
∧ [−→] q ( t )
|
| 106 |
-
dt
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
**Bài tập 1.5.** Viết phương trình tiếp tuyến và pháp diện của đường:
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
a. b.
|
| 115 |
-
|
| 116 |
-
[page 30] _28_ _Chương 2. Tích phân bội_
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
**Chú ý 2.3.** Nếu tồn tại tích phân kép f ( x, y ) dxdy thì ta nói hàm số f ( x, y ) khảtích
|
| 120 |
-
��
|
| 121 |
-
|
| 122 |
-
D
|
| 123 |
-
|
| 124 |
-
trong miền D .
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
**Tính chất cơ bản:**
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
Tính chất tuyến tính:
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
��
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
f ( x, y ) dxdy +
|
| 139 |
-
��
|
| 140 |
-
D D
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
[ f ( x, y ) + g ( x, y )] dxdy =
|
| 146 |
-
��
|
| 147 |
-
D D
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
g ( x, y ) dxdy
|
| 152 |
-
|
| 153 |
-
D
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
��
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
k f ( x, y ) dxdy = k
|
| 162 |
-
��
|
| 163 |
-
D D
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
f ( x, y ) dxdy
|
| 168 |
-
|
| 169 |
-
D
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
- Tính chất cộng tính: Nếu D = D 1 ∪ D 2, ởđó D 1 và D 2 không "chồng" lên nhau (có thể
|
| 175 |
-
ngoại trừphần biên) thì
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
��
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
f ( x, y ) dxdy =
|
| 184 |
-
��
|
| 185 |
-
D D
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
f ( x, y ) dxdy.
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
D 1
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
f ( x, y ) dxdy +
|
| 198 |
-
��
|
| 199 |
-
|
| 200 |
-
D 2
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
#### **1.2 Tính tích phân kép trong hệtoạđộDescartes**
|
| 212 |
-
|
| 213 |
-
Đểtính các tích phân hai lớp, ta cần phải đưa vềtính các tích phân lặp.
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
1. Nếu D là miền hình chữnhật ( D ) : a ⩽ x ⩽ b, c ⩽ y ⩽ d thì ta có thểsửdụng một
|
| 217 |
-
trong hai tích phân lặp
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
d
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
dy
|
| 225 |
-
|
| 226 |
-
�
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
c
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
d
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
f ( x, y ) dx.
|
| 237 |
-
|
| 238 |
-
�
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
c
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
d
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
f ( x, y ) dy =
|
| 249 |
-
|
| 250 |
-
�
|
| 251 |
-
|
| 252 |
-
|
| 253 |
-
c
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
28
|
| 257 |
-
|
| 258 |
-
|
| 259 |
-
|
| 260 |
-
f ( x, y ) dxdy =
|
| 261 |
-
|
| 262 |
-
��
|
| 263 |
-
|
| 264 |
-
D
|
| 265 |
-
|
| 266 |
-
|
| 267 |
-
|
| 268 |
-
b
|
| 269 |
-
|
| 270 |
-
|
| 271 |
-
dx
|
| 272 |
-
|
| 273 |
-
�
|
| 274 |
-
|
| 275 |
-
|
| 276 |
-
a
|
| 277 |
-
|
| 278 |
-
[page 25] # **CHƯƠNG 2**
|
| 279 |
-
|
| 280 |
-
## **T ÍCH PHÂN BỘI**
|
| 281 |
-
|
| 282 |
-
#### § 1. T ÍCH PHÂN KÉP **1.1 Định nghĩa**
|
| 283 |
-
|
| 284 |
-
**Diện tích và tích phân xác định**
|
| 285 |
-
|
| 286 |
-
|
| 287 |
-
Cho f ( x ) là một hàm sốxác định với a ≤ x ≤ b. Đầu tiên ta chia khoảng [ a, b ] này thành
|
| 288 |
-
n khoảng nhỏ [ x i − 1, x i ] với độdài bằng nhau ∆x = [b] [−] n [a] và chọn trong mỗi khoảng đó một
|
| 289 |
-
|
| 290 |
-
điểm x i [∗] [bất kì. Sau đó lập tổng Riemann]
|
| 291 |
-
|
| 292 |
-
|
| 293 |
-
n
|
| 294 |
-
#### S ( n ) = ∑ f ( x i [∗] [)] [∆][x]
|
| 295 |
-
|
| 296 |
-
i = 1
|
| 297 |
-
|
| 298 |
-
|
| 299 |
-
23
|
|
|
|
| 1 |
+
[page 19] ### **4.4** **Các lỗhổng được khai thác**
|
| 2 |
|
| 3 |
+
#### **4.4.1 Command injection trong tính năng chuẩn đoán** **ping**
|
| 4 |
|
| 5 |
+
Lỗhổng này có mã CVE là **CVE-2024-51186** [13]. Đây là lỗhổng trong
|
| 6 |
+
dịch vụ **ncc2** của thiết bịnày. Trong dịch vụ **ncc2** này, có một endpoint xử
|
| 7 |
+
lý CGI request là **ping.ccp** . Endpoint này cho phép chuẩn đoán các thiết
|
| 8 |
+
bịqua mạng bằng cách "ping"các thiết bịđó. Dưới đây là ảnh giao diện cho
|
| 9 |
+
phép người dùng tương tác với tính năng này.
|
| 10 |
|
| 11 |
|
| 12 |
+
18
|
| 13 |
|
| 14 |
+
[page 20] Dưới đây là một request tới **ping.ccp** đã được bắt trong Burp Suite:
|
|
|
|
| 15 |
|
| 16 |
|
| 17 |
+
Sau khi dịch ngược file **ncc2**, chúng ta có thểthấy được là hàm
|
| 18 |
+
**FUN_0049e128** sẽxửlý các POST request tới **ping.ccp** . Hàm này
|
| 19 |
+
sẽlấy địa chỉping từtham số **ping_addr** trong request.
|
| 20 |
|
|
|
|
|
|
|
| 21 |
|
| 22 |
+
19
|
| 23 |
|
| 24 |
+
[page 23] Hàm **callback_ccp_ddns_check** có sửdụng hàm **doCheck** (được sử
|
| 25 |
+
dụng khi tham số **ccp_act** trong request tới **ddns_check.ccp** được set
|
| 26 |
+
thành **doCheck** ) đểthu thập thông tin DDNS: Tên host, tên người dùng,
|
| 27 |
+
mật khẩu.
|
| 28 |
|
|
|
|
|
|
|
| 29 |
|
| 30 |
+
Những tham sốnày sẽđược đưa vào hàm **system** . Hàm này sẽchạy
|
| 31 |
+
**ddns_check.c** đểxửlý request.
|
| 32 |
|
| 33 |
|
| 34 |
+
Hàm **doCheck** này không có bất kì chức năng nào đểkiểm tra xem đầu vào
|
| 35 |
+
có bịcommand injection hay không. Dưới đây là minh họa một payload mở
|
| 36 |
|
| 37 |
|
| 38 |
+
22
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test/mcq_output.json
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"mcqs": {
|
| 3 |
+
"1": {
|
| 4 |
+
"câu hỏi": "Mã CVE của lỗhổng command injection trong tính năng chuẩn đoán ping của dịch vụ ncc2 là gì?",
|
| 5 |
+
"lựa chọn": {
|
| 6 |
+
"a": "CVE-2024-51186",
|
| 7 |
+
"b": "CVE-2023-12345",
|
| 8 |
+
"c": "CVE-2022-00001",
|
| 9 |
+
"d": "CVE-2025-99999"
|
| 10 |
+
},
|
| 11 |
+
"đáp án": "CVE-2024-51186"
|
| 12 |
+
},
|
| 13 |
+
"2": {
|
| 14 |
+
"câu hỏi": "Theo nội dung, nguyên nhân chính khiến dữ liệu người dùng CloudPets bị rò rỉ vào năm 2017 là gì?",
|
| 15 |
+
"lựa chọn": {
|
| 16 |
+
"a": "Mật khẩu mạnh, khó bị brute force",
|
| 17 |
+
"b": "Mật khẩu yếu, dễ bị brute force",
|
| 18 |
+
"c": "Hệ thống sử dụng mã hóa đầu cuối",
|
| 19 |
+
"d": "Thiết bị được cập nhật bảo mật thường xuyên"
|
| 20 |
+
},
|
| 21 |
+
"đáp án": "Mật khẩu yếu, dễ bị brute force"
|
| 22 |
+
},
|
| 23 |
+
"3": {
|
| 24 |
+
"câu hỏi": "Theo nội dung trên, phương pháp nào sau đây được nêu là một dạng tấn công tại tầng cảm biến của IoT?",
|
| 25 |
+
"lựa chọn": {
|
| 26 |
+
"a": "Tấn công side‑channel bằng cách đo mức tiêu thụ điện năng hoặc bức xạ điện từ của thiết bị để trích xuất khóa bí mật.",
|
| 27 |
+
"b": "Tấn công từ chối dịch vụ (DoS) trên mạng để làm ngưng hoạt động các dịch vụ IoT.",
|
| 28 |
+
"c": "Đánh cắp mật khẩu qua giao thức không mã hoá trong quá trình truyền dữ liệu.",
|
| 29 |
+
"d": "Tấn công phishing qua email nhằm lừa người dùng cung cấp thông tin đăng nhập."
|
| 30 |
+
},
|
| 31 |
+
"đáp án": "Tấn công side‑channel bằng cách đo mức tiêu thụ điện năng hoặc bức xạ điện từ của thiết bị để trích xuất khóa bí mật."
|
| 32 |
+
},
|
| 33 |
+
"4": {
|
| 34 |
+
"câu hỏi": "Theo nội dung đã cho, yếu tố bảo mật nào đã góp phần gây ra rò rỉ dữ liệu của sản phẩm CloudPets vào năm 2017?",
|
| 35 |
+
"lựa chọn": {
|
| 36 |
+
"a": "Mật khẩu yếu, dễ bị tấn công brute force",
|
| 37 |
+
"b": "Sử dụng mã hóa mạnh cho cơ sở dữ liệu",
|
| 38 |
+
"c": "Áp dụng xác thực hai yếu tố cho người dùng",
|
| 39 |
+
"d": "Thực hiện kiểm tra bảo mật định kỳ"
|
| 40 |
+
},
|
| 41 |
+
"đáp án": "Mật khẩu yếu, dễ bị tấn công brute force"
|
| 42 |
+
},
|
| 43 |
+
"5": {
|
| 44 |
+
"câu hỏi": "Mã CVE nào được gán cho lỗhổng command injection trong tính năng chuẩn đoán \"ping\" của dịch vụ ncc2?",
|
| 45 |
+
"lựa chọn": {
|
| 46 |
+
"a": "CVE-2023-12345",
|
| 47 |
+
"b": "CVE-2024-51186",
|
| 48 |
+
"c": "CVE-2022-98765",
|
| 49 |
+
"d": "CVE-2025-00001"
|
| 50 |
+
},
|
| 51 |
+
"đáp án": "CVE-2024-51186"
|
| 52 |
+
}
|
| 53 |
+
},
|
| 54 |
+
"validation": {
|
| 55 |
+
"1": {
|
| 56 |
+
"supported_by_embeddings": true,
|
| 57 |
+
"max_similarity": 1.0336397886276245,
|
| 58 |
+
"evidence": [
|
| 59 |
+
{
|
| 60 |
+
"idx": 25,
|
| 61 |
+
"page": 19,
|
| 62 |
+
"score": 0.5762448310852051,
|
| 63 |
+
"text": "### **4.4** **Các lỗhổng được khai thác**\n\n#### **4.4.1 Command injection trong tính năng chuẩn đoán** **ping**\n\nLỗhổng này có mã CVE là **CVE-2024-51186** [13]. Đây là lỗhổng trong\ndịch vụ **ncc2** của thiết bịnày. Trong dịch vụ **ncc2** này, có một endpoint xử\nlý CGI request là **ping.ccp** . Endpoint này cho phép chuẩn đoán các thiết\nbịqua mạng bằng cách \"ping\"các thiết bịđó. Dưới đây là ảnh giao diện cho\nphép người dùng tương tác với tính năng này.\n\n\n18"
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"idx": 28,
|
| 67 |
+
"page": 22,
|
| 68 |
+
"score": 1.028198480606079,
|
| 69 |
+
"text": "Tuy nhiên, hàm **hasInjectionString** không kiểm tra hết mọi ký tựtách\nlệnh và có khảnăng được sửdụng cho command injection. Một người tấn\ncông có thểchèn lệnh thông qua ký tựxuống dòng **\\n** (Mã hex là **0x0A** ).\nTừlỗhổng này, chúng ta có thểthực hiện chèn lệnh đểtạo một bind shell\nbằng **telnet** mởởcổng 9999.\n\n\nĐểcó thểphòng chống lỗhổng này, hàm **hasInjectionString** cần black list\ntổng quan hơn, bao gồm nhiều kí tựinjection hơn. Ngoài ra, chúng ta cũng\ncó thểchuyển sang sửdụng white list thay vì black list và chỉtập trung vào\ncác kí tựđược cho phép trong một địa chỉIP.\n\n#### **4.4.2 Command injection trong tính năng DDNS** **check**\n\n\nLỗ hổng này có mã CVE là **CVE-2021-45382** [14]. Endpoint\n**ddns_check.ccp** có lỗ hổng dẫn tới command injection. Hàm\n**callback_ccp_ddns_check** là hàm xử lý các request tới\n\n.\n**ddns_check.ccp**\n\n\n21"
|
| 70 |
+
},
|
| 71 |
+
{
|
| 72 |
+
"idx": 26,
|
| 73 |
+
"page": 20,
|
| 74 |
+
"score": 1.0336397886276245,
|
| 75 |
+
"text": "Dưới đây là một request tới **ping.ccp** đã được bắt trong Burp Suite:\n\n\nSau khi dịch ngược file **ncc2**, chúng ta có thểthấy được là hàm\n**FUN_0049e128** sẽxửlý các POST request tới **ping.ccp** . Hàm này\nsẽlấy địa chỉping từtham số **ping_addr** trong request.\n\n\n19"
|
| 76 |
+
}
|
| 77 |
+
],
|
| 78 |
+
"model_verdict": {
|
| 79 |
+
"supported": true,
|
| 80 |
+
"confidence": 0.99,
|
| 81 |
+
"evidence": "Lỗhổng này có mã CVE là CVE-2024-51186 ... Đây là lỗhổng trong dịch vụ ncc2 của thiết bị này.",
|
| 82 |
+
"reason": "Context explicitly states that the command injection vulnerability in the ping diagnostic feature of ncc2 has CVE-2024-51186."
|
| 83 |
+
}
|
| 84 |
+
},
|
| 85 |
+
"2": {
|
| 86 |
+
"supported_by_embeddings": true,
|
| 87 |
+
"max_similarity": 0.9513510465621948,
|
| 88 |
+
"evidence": [
|
| 89 |
+
{
|
| 90 |
+
"idx": 13,
|
| 91 |
+
"page": 9,
|
| 92 |
+
"score": 0.7262179851531982,
|
| 93 |
+
"text": "cation kém, sẽcó khảnăng bịngười tấn công đánh\ncắp các thông tin này khi điện thoại bịroot hoặc mất. Hacker có thểlợi dụng\nđểtruy cập và tấn công hệthống IoT. #### **2.3.4 Ví dụthực tế**\n\n\nVào 2017, thông tin vềngười dùng của sản phẩm CloudPets (đồchơi kết nối\nvới mạng) đã bịrò rỉ. Sản phẩm này có yêu cầu mật khẩu kém, dễbịbrute\nforce. Thông tin vềngười dùng cũng được lưu lại trong database không được\nbảo vệtốt, cho phép người tấn công truy cập tuy không được cho phép. [9]\n\n\n8"
|
| 94 |
+
},
|
| 95 |
+
{
|
| 96 |
+
"idx": 43,
|
| 97 |
+
"page": 34,
|
| 98 |
+
"score": 0.9087281227111816,
|
| 99 |
+
"text": "w.theguardian.com/technology/2017/feb/28/cloudpets-data-breach-leaks-details-of-500000-children-and-adults/)\n[cloudpets-data-breach-leaks-details-of-500000-children-and-adults/.](https://www.theguardian.com/technology/2017/feb/28/cloudpets-data-breach-leaks-details-of-500000-children-and-adults/)\n\n\n33"
|
| 100 |
+
},
|
| 101 |
+
{
|
| 102 |
+
"idx": 15,
|
| 103 |
+
"page": 11,
|
| 104 |
+
"score": 0.9513510465621948,
|
| 105 |
+
"text": "### **3.2 Dịch vụmạng không an toàn**\n\nNhững dịch vụmạng không cần thiết hoặc không an toàn, có tính bảo mật,\nmã hóa kém chạy trên thiết bịlà một điểm yếu trầm trọng, nhất là các dịch\nvụcó kết nối với Internet. Người tấn công có thểtrích xuất thông tin nhạy\ncảm, tấn công các hệthống khác có kết nối với thiết bịđã bịtấn công, hoặc\ntruy cập vào thiết bịmà không được phép. ### **3.3 Giao diện ecosystem không an toàn**\n\n\nCác giao diện web, API, cloud, hoặc di động cho các thiết bịIoT nếu không\nđược bảo vệan toàn (thiếu xác thực, mã hóa, filter đầu vào và ra) có thểsẽ\nmởra hướng tấn công vào thiết bịhoặc các bộphận trong thiết bịđó. ### **3.4** **Không có cơ chếcập nhật an toàn**\n\n\nNếu thiết bịkhông có cơ chếcập nhật an toàn (Xác thực firmware, mã hóa\ntrong lúc chuyển giao firmware, cơ chếchống rollback, thông báo người dùng\nvềcập nhật firmware) thì các thiết bịnày có khảnăng bịtấn công chỉnh sửa\nfirmware và các bộphận hệthống quan trọng. ### **3.5** **Sửdụng thành phần phiên bản cũ, thiếu*..."
|
| 106 |
+
}
|
| 107 |
+
],
|
| 108 |
+
"model_verdict": {
|
| 109 |
+
"supported": true,
|
| 110 |
+
"confidence": 0.99,
|
| 111 |
+
"evidence": "Sản phẩm này có yêu cầu mật khẩu kém, dễ bị brute force.",
|
| 112 |
+
"reason": "Context nêu rõ mật khẩu yếu, dễ bị brute force là nguyên nhân dẫn đến rò rỉ dữ liệu CloudPets năm 2017."
|
| 113 |
+
}
|
| 114 |
+
},
|
| 115 |
+
"3": {
|
| 116 |
+
"supported_by_embeddings": true,
|
| 117 |
+
"max_similarity": 0.6533669233322144,
|
| 118 |
+
"evidence": [
|
| 119 |
+
{
|
| 120 |
+
"idx": 18,
|
| 121 |
+
"page": 12,
|
| 122 |
+
"score": 0.5218343138694763,
|
| 123 |
+
"text": "iên cốvềmặt vật lý**\n\n\nSựkiên cốvềmặt vật lý, phần cứng cho các thiết bịIoT là một yếu tố\ncần thiết. Nếu như thiết bịkhông có các phương pháp chống đo điện áp,\nkhông tắt các cổng debug, không có phương pháp xác thực tính toàn vẹn của\nfirmware, người tấn công có thểtrích xuất thông tin nhạy cảm như khóa bí\nmật từthiết bịbằng các phương pháp tấn công phần cứng và sửdụng thông\ntin này cho các cuộc tấn công từxa hoặc tấn công chiếm quyền điều khiển\nthiết bị. 11"
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"idx": 39,
|
| 127 |
+
"page": 33,
|
| 128 |
+
"score": 0.6069067716598511,
|
| 129 |
+
"text": "# **Chương 5** **Kết luận**\n\nBảo mật cho IoT là một thách thức do hàng tỷthiết bịkết nối, từbộđiều\nnhiệt gia đình đến cảm biến công nghiệp, ngày càng gia tăng. Những thiết bị\nnày thường gặp phải các vấn đềnhư xác thực yếu, kênh truyền không được\nmã hóa và cơ chếcập nhật firmware không an toàn, tất cảđều mởđường\ncho các cuộc tấn công như MITM, phát lại gói tin, can thiệp vào firmware\nvà dò mật khẩu. Dựán này đã thảo luận vềcác mối đe dọa IoT, xác định\ncác phương thức khai thác thực tiễn. Các lỗhổng trên router DIR-820L\nđã minh họa rủi ro lớn trong thiết bịIoT và các điểm yếu cần được khắc phục.\n\n\nĐểbảo mật được hệsinh thái IoT đòi hỏi một cách tiếp cận tổng\nthểtrên nhiều thành phần của hệthống. Dựán với thiết bịD-Link\nDIR-820L cho thấy các cách các thiết bịIoT có thểbịkhai thác và cách bảo\nvệcác thiết bịnày khỏi những cuộc tấn công này, mởhướng cho các triển\nkhai IoT an toàn và bền vững hơn.\n\n\n32"
|
| 130 |
+
},
|
| 131 |
+
{
|
| 132 |
+
"idx": 4,
|
| 133 |
+
"page": 4,
|
| 134 |
+
"score": 0.6533669233322144,
|
| 135 |
+
"text": "# **Tóm tắt dựán**\n\nCác thiết bịIoT (Internet of Things) ngày càng trởthành 1 phần tất yếu\ntrong cuộc sống hiện đại. Với sốlượng thiết bịkết nối đa dạng và dữliệu\nđược thu thập liên tục ngày càng gia tăng, các lỗhổng bảo mật có thểdẫn\nđến những rủi ro nghiêm trọng cho người dùng và doanh nghiệp. Việc đảm\nbảo an toàn và bảo mật cho hệsinh thái IoT là yêu cầu cấp thiết, đòi hỏi\nnhững giải pháp toàn diện từcấp độthiết bịđến mạng lưới kết nối.\n\n\nDựán này sẽđi sâu vào việc tìm hiểu vềhạtầng IoT và phân tích\nbảo mật trong hạtầng đó. Đồng thời, các phương pháp khai thác IoT sẽ\nđược khám phá và một sốlỗhổng bảo mật của thiết bịIoT sẽđược minh\nhọa. Mục tiêu của dựán này là hiểu sâu hơn vềbảo mật cho hệthống IoT\nvà đềcao sựquan trọng của việc xây dựng hệthống bảo mật cho hạtầng\nnày.\n\n\n3"
|
| 136 |
+
}
|
| 137 |
+
],
|
| 138 |
+
"model_verdict": {
|
| 139 |
+
"supported": true,
|
| 140 |
+
"confidence": 0.9,
|
| 141 |
+
"evidence": "Nếu như thiết bị không có các phương pháp chống đo điện áp... người tấn công có thể trích xuất thông tin nhạy cảm như khóa bí mật từ thiết bị bằng các phương pháp tấn công phần cứng",
|
| 142 |
+
"reason": "Context đề cập đến việc đo điện áp (side‑channel) để trích xuất khóa bí mật, chứng minh đây là dạng tấn công ở tầng cảm biến"
|
| 143 |
+
}
|
| 144 |
+
},
|
| 145 |
+
"4": {
|
| 146 |
+
"supported_by_embeddings": true,
|
| 147 |
+
"max_similarity": 0.7880681753158569,
|
| 148 |
+
"evidence": [
|
| 149 |
+
{
|
| 150 |
+
"idx": 13,
|
| 151 |
+
"page": 9,
|
| 152 |
+
"score": 0.6182309985160828,
|
| 153 |
+
"text": "cation kém, sẽcó khảnăng bịngười tấn công đánh\ncắp các thông tin này khi điện thoại bịroot hoặc mất. Hacker có thểlợi dụng\nđểtruy cập và tấn công hệthống IoT. #### **2.3.4 Ví dụthực tế**\n\n\nVào 2017, thông tin vềngười dùng của sản phẩm CloudPets (đồchơi kết nối\nvới mạng) đã bịrò rỉ. Sản phẩm này có yêu cầu mật khẩu kém, dễbịbrute\nforce. Thông tin vềngười dùng cũng được lưu lại trong database không được\nbảo vệtốt, cho phép người tấn công truy cập tuy không được cho phép. [9]\n\n\n8"
|
| 154 |
+
},
|
| 155 |
+
{
|
| 156 |
+
"idx": 39,
|
| 157 |
+
"page": 33,
|
| 158 |
+
"score": 0.7261428833007812,
|
| 159 |
+
"text": "# **Chương 5** **Kết luận**\n\nBảo mật cho IoT là một thách thức do hàng tỷthiết bịkết nối, từbộđiều\nnhiệt gia đình đến cảm biến công nghiệp, ngày càng gia tăng. Những thiết bị\nnày thường gặp phải các vấn đềnhư xác thực yếu, kênh truyền không được\nmã hóa và cơ chếcập nhật firmware không an toàn, tất cảđều mởđường\ncho các cuộc tấn công như MITM, phát lại gói tin, can thiệp vào firmware\nvà dò mật khẩu. Dựán này đã thảo luận vềcác mối đe dọa IoT, xác định\ncác phương thức khai thác thực tiễn. Các lỗhổng trên router DIR-820L\nđã minh họa rủi ro lớn trong thiết bịIoT và các điểm yếu cần được khắc phục.\n\n\nĐểbảo mật được hệsinh thái IoT đòi hỏi một cách tiếp cận tổng\nthểtrên nhiều thành phần của hệthống. Dựán với thiết bịD-Link\nDIR-820L cho thấy các cách các thiết bịIoT có thểbịkhai thác và cách bảo\nvệcác thiết bịnày khỏi những cuộc tấn công này, mởhướng cho các triển\nkhai IoT an toàn và bền vững hơn.\n\n\n32"
|
| 160 |
+
},
|
| 161 |
+
{
|
| 162 |
+
"idx": 15,
|
| 163 |
+
"page": 11,
|
| 164 |
+
"score": 0.7880681753158569,
|
| 165 |
+
"text": "### **3.2 Dịch vụmạng không an toàn**\n\nNhững dịch vụmạng không cần thiết hoặc không an toàn, có tính bảo mật,\nmã hóa kém chạy trên thiết bịlà một điểm yếu trầm trọng, nhất là các dịch\nvụcó kết nối với Internet. Người tấn công có thểtrích xuất thông tin nhạy\ncảm, tấn công các hệthống khác có kết nối với thiết bịđã bịtấn công, hoặc\ntruy cập vào thiết bịmà không được phép. ### **3.3 Giao diện ecosystem không an toàn**\n\n\nCác giao diện web, API, cloud, hoặc di động cho các thiết bịIoT nếu không\nđược bảo vệan toàn (thiếu xác thực, mã hóa, filter đầu vào và ra) có thểsẽ\nmởra hướng tấn công vào thiết bịhoặc các bộphận trong thiết bịđó. ### **3.4** **Không có cơ chếcập nhật an toàn**\n\n\nNếu thiết bịkhông có cơ chếcập nhật an toàn (Xác thực firmware, mã hóa\ntrong lúc chuyển giao firmware, cơ chếchống rollback, thông báo người dùng\nvềcập nhật firmware) thì các thiết bịnày có khảnăng bịtấn công chỉnh sửa\nfirmware và các bộphận hệthống quan trọng. ### **3.5** **Sửdụng thành phần phiên bản cũ, thiếu*..."
|
| 166 |
+
}
|
| 167 |
+
],
|
| 168 |
+
"model_verdict": {
|
| 169 |
+
"supported": true,
|
| 170 |
+
"confidence": 0.99,
|
| 171 |
+
"evidence": "Sản phẩm này có yêu cầu mật khẩu kém, dễ bị brute force.",
|
| 172 |
+
"reason": "Context nêu rõ mật khẩu yếu, dễ bị tấn công brute force là nguyên nhân góp phần gây rò rỉ dữ liệu CloudPets năm 2017."
|
| 173 |
+
}
|
| 174 |
+
},
|
| 175 |
+
"5": {
|
| 176 |
+
"supported_by_embeddings": true,
|
| 177 |
+
"max_similarity": 1.001603364944458,
|
| 178 |
+
"evidence": [
|
| 179 |
+
{
|
| 180 |
+
"idx": 26,
|
| 181 |
+
"page": 20,
|
| 182 |
+
"score": 0.9440182447433472,
|
| 183 |
+
"text": "Dưới đây là một request tới **ping.ccp** đã được bắt trong Burp Suite:\n\n\nSau khi dịch ngược file **ncc2**, chúng ta có thểthấy được là hàm\n**FUN_0049e128** sẽxửlý các POST request tới **ping.ccp** . Hàm này\nsẽlấy địa chỉping từtham số **ping_addr** trong request.\n\n\n19"
|
| 184 |
+
},
|
| 185 |
+
{
|
| 186 |
+
"idx": 28,
|
| 187 |
+
"page": 22,
|
| 188 |
+
"score": 1.001603364944458,
|
| 189 |
+
"text": "Tuy nhiên, hàm **hasInjectionString** không kiểm tra hết mọi ký tựtách\nlệnh và có khảnăng được sửdụng cho command injection. Một người tấn\ncông có thểchèn lệnh thông qua ký tựxuống dòng **\\n** (Mã hex là **0x0A** ).\nTừlỗhổng này, chúng ta có thểthực hiện chèn lệnh đểtạo một bind shell\nbằng **telnet** mởởcổng 9999.\n\n\nĐểcó thểphòng chống lỗhổng này, hàm **hasInjectionString** cần black list\ntổng quan hơn, bao gồm nhiều kí tựinjection hơn. Ngoài ra, chúng ta cũng\ncó thểchuyển sang sửdụng white list thay vì black list và chỉtập trung vào\ncác kí tựđược cho phép trong một địa chỉIP.\n\n#### **4.4.2 Command injection trong tính năng DDNS** **check**\n\n\nLỗ hổng này có mã CVE là **CVE-2021-45382** [14]. Endpoint\n**ddns_check.ccp** có lỗ hổng dẫn tới command injection. Hàm\n**callback_ccp_ddns_check** là hàm xử lý các request tới\n\n.\n**ddns_check.ccp**\n\n\n21"
|
| 190 |
+
}
|
| 191 |
+
],
|
| 192 |
+
"model_verdict": {
|
| 193 |
+
"supported": true,
|
| 194 |
+
"confidence": 1.0,
|
| 195 |
+
"evidence": "Lỗhổng này có mã CVE là **CVE-2024-51186** ... Đây là lỗhổng trong dịch vụ **ncc2** của thiết bị này.",
|
| 196 |
+
"reason": "Context explicitly states that the command injection vulnerability in the ping diagnostic feature of the ncc2 service is assigned CVE-2024-51186."
|
| 197 |
+
}
|
| 198 |
+
}
|
| 199 |
+
}
|
| 200 |
+
}
|
test/oop_mcq_output.json
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"mcqs": {
|
| 3 |
+
"1": {
|
| 4 |
+
"câu hỏi": "Trong ví dụ minh họa lớp Cat, khi gọi cat.describe(2), dòng lệnh `print(self.age)` sẽ in ra giá trị nào?",
|
| 5 |
+
"lựa chọn": {
|
| 6 |
+
"a": "2 (giá trị truyền vào hàm, là biến cục bộ)",
|
| 7 |
+
"b": "1 (giá trị của biến lớp)",
|
| 8 |
+
"c": "Lỗi vì self.age không được định nghĩa",
|
| 9 |
+
"d": "0 (giá trị mặc định của biến toàn cục)"
|
| 10 |
+
},
|
| 11 |
+
"đáp án": "1 (giá trị của biến lớp)"
|
| 12 |
+
},
|
| 13 |
+
"2": {
|
| 14 |
+
"câu hỏi": "Theo nội dung trên, biến nào được mô tả là “thông tin tuyệt mật – chỉ lớp khai báo nó mới có quyền truy cập”?",
|
| 15 |
+
"lựa chọn": {
|
| 16 |
+
"a": "private",
|
| 17 |
+
"b": "protected",
|
| 18 |
+
"c": "public",
|
| 19 |
+
"d": "static"
|
| 20 |
+
},
|
| 21 |
+
"đáp án": "private"
|
| 22 |
+
},
|
| 23 |
+
"3": {
|
| 24 |
+
"câu hỏi": "Biến cục bộ (local variable) trong lập trình hướng đối tượng có đặc điểm nào sau đây?",
|
| 25 |
+
"lựa chọn": {
|
| 26 |
+
"a": "Có thể truy cập ở bất kỳ đâu trong chương trình",
|
| 27 |
+
"b": "Chỉ tồn tại và có thể sử dụng trong một hàm hoặc phương thức cụ thể",
|
| 28 |
+
"c": "Là biến toàn cục được khai báo bên ngoài hàm",
|
| 29 |
+
"d": "Biến được tự động khởi tạo giá trị mặc định"
|
| 30 |
+
},
|
| 31 |
+
"đáp án": "Chỉ tồn tại và có thể sử dụng trong một hàm hoặc phương thức cụ thể"
|
| 32 |
+
},
|
| 33 |
+
"4": {
|
| 34 |
+
"câu hỏi": "Trong lập trình hướng đối tượng, thuộc tính (attributes) của một đối tượng là gì?",
|
| 35 |
+
"lựa chọn": {
|
| 36 |
+
"a": "Các hàm thực hiện hành động của đối tượng",
|
| 37 |
+
"b": "Các biến lưu trữ dữ liệu mô tả đối tượng",
|
| 38 |
+
"c": "Các lớp mà đối tượng kế thừa từ chúng",
|
| 39 |
+
"d": "Các phương thức tĩnh không phụ thuộc vào đối tượng"
|
| 40 |
+
},
|
| 41 |
+
"đáp án": "Các biến lưu trữ dữ liệu mô tả đối tượng"
|
| 42 |
+
},
|
| 43 |
+
"5": {
|
| 44 |
+
"câu hỏi": "Trong Python, phương thức đặc biệt nào cho phép một đối tượng được gọi như một hàm?",
|
| 45 |
+
"lựa chọn": {
|
| 46 |
+
"a": "__init__",
|
| 47 |
+
"b": "__str__",
|
| 48 |
+
"c": "__call__",
|
| 49 |
+
"d": "__len__"
|
| 50 |
+
},
|
| 51 |
+
"đáp án": "__call__"
|
| 52 |
+
}
|
| 53 |
+
},
|
| 54 |
+
"validation": {
|
| 55 |
+
"1": {
|
| 56 |
+
"supported_by_embeddings": true,
|
| 57 |
+
"max_similarity": 1.0644214153289795,
|
| 58 |
+
"evidence": [
|
| 59 |
+
{
|
| 60 |
+
"idx": 1,
|
| 61 |
+
"page": 1,
|
| 62 |
+
"score": 0.6182047724723816,
|
| 63 |
+
"text": "**Biến cục bộ(Local)**\n\n\nBiến cục bộchỉtồn tại và có thểsửdụng trong một hàm hoặc phương thức cụthể. **Quy tắc ưu tiên (Scope resolution):**\n\n\nLocal _>_ Instance _>_ Class _>_ Global (1)\n\n\n**Ví dụminh họa:**\n\n\n1 `class Cat():`\n\n\n2 `age = 1 #Class variabe`\n\n3 `def describe(self, age):`\n\n4 `print(age, age)` `# Ouput: 2,2 (both are local variables)`\n\n5 `print(self.age)` `# Output: 1 (class variable)`\n\n\n6\n\n\n7 `cat = Cat()`\n\n\n8 `cat.describe(2)`\n\n\n1"
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"idx": 2,
|
| 67 |
+
"page": 2,
|
| 68 |
+
"score": 0.9349313378334045,
|
| 69 |
+
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\nCảhai biến age ởlần in đầu tiên đều là biến cục bộvì Python sẽưu tiên tìm biến cục bộtrước,\nởđây là đối số2 truyền vào age. Vì ta không định nghĩa self.age, nên khi gọi, Python sẽtìm đến\nthứtựtiếp theo là biến Class. Chính vì vậy, ta sẽin ra được kết quảage = 1\n\n\n**1.1.2** **Biến toàn cục (Global)**\n\n\nBiến toàn cục được khai báo bên ngoài hàm hoặc class, sửdụng được trên toàn chương trình\nnhưng nên hạn chếđểtránh gây khó kiểm soát. **Không khuyến khích:**\n\n\n1 `counter = 0` `# Global variable`\n\n\n2\n\n\n3 `class MyClass:`\n\n4 `def increment(self):`\n\n\n5 `global counter`\n\n\n6 `counter += 1`\n\n\n**Khuyến khích:**\n\n\n1 `class MyClass:`\n\n\n2 `counter = 0` `# Class attribute`\n\n\n3\n\n\n4 `def increment(self):`\n\n\n5 `MyClass.counter += 1`\n\n### **2 Động lực cho sựra đời của OOP**\n\n\nTrong thực tế, chúng ta luôn tìm cách mô hình hóa các thực thểthực tếthành các đối tượng số\nhóa. Từnhu cầu quản lý và tổchức các thực thểnày, lập trình hướng đối tượng ra đời đểđơn\ngiản hóa và ..."
|
| 70 |
+
},
|
| 71 |
+
{
|
| 72 |
+
"idx": 8,
|
| 73 |
+
"page": 5,
|
| 74 |
+
"score": 1.0644214153289795,
|
| 75 |
+
"text": "es a function →Output: Hi Alice`\n\n\n2. **Stateful function** : Hàm có thểghi nhớtrạng thái bên trong. 1 `class Counter:`\n\n\n2 `def __init__(self):`\n\n\n3 `self.count = 0`\n\n\n4\n\n\n5 `def __call__(self):`\n\n\n6 `self.count += 1`\n\n\n7 `return self.count`\n\n\n8\n\n\n9 `counter = Counter()`\n\n\n10\n\n\n11 `print(counter())` `# 1`\n\n12 `print(counter())` `# 2`\n\n13 `print(counter())` `# 3`\n\n\nMỗi lần gọi `counter()` đều ghi nhớtrạng thái trước đó và cộng dồn lên, không giống như\ncác phương thức thông thường vốn không lưu trạng thái giữa các lần gọi. 3. **Decorator hoặc Callback handler** : (nâng cao cần tìm hiểu thêm). ## **Phần II: Các tính chất cơ bản trong Object-** **Oriented Programming**\n\n### **5** **Delegation (Ủy quyền)**\n\n\nDelegation (ủy quyền) trong lập trình hướng đối tượng là một kỹthuật trong đó một đối tượng\nủy thác trách nhiệm thực hiện một hành vi cụthểcho một đối tượng khác. Thay vì kếthừa trực\n\n\n5"
|
| 76 |
+
}
|
| 77 |
+
],
|
| 78 |
+
"model_verdict": {
|
| 79 |
+
"supported": true,
|
| 80 |
+
"confidence": 0.99,
|
| 81 |
+
"evidence": "print(self.age) # Output: 1 (class variable)",
|
| 82 |
+
"reason": "Context explicitly states that print(self.age) outputs 1, the class variable."
|
| 83 |
+
}
|
| 84 |
+
},
|
| 85 |
+
"2": {
|
| 86 |
+
"supported_by_embeddings": true,
|
| 87 |
+
"max_similarity": 1.3231226205825806,
|
| 88 |
+
"evidence": [
|
| 89 |
+
{
|
| 90 |
+
"idx": 15,
|
| 91 |
+
"page": 8,
|
| 92 |
+
"score": 1.0267785787582397,
|
| 93 |
+
"text": "p con của nó đều phải **bắt buộc** có phương thức tính diện\ntích. Nếu không, chương trình sẽbáo lỗi. ### **8 Encapsulation (Đóng gói)**\n\n\nTính đóng gói giúp thông tin nội bộcủa đối tượng và chỉcho phép truy cập qua phương thức\ncông khai (public methods). Điều này giúp bảo vệdữliệu và kiểm soát cách dữliệu bịthay đổi. **Ví dụminh họa:**\n\n\n1 `class BankAccount:`\n\n\n2 `def __init__(self, owner, balance):`\n\n\n3 `self.owner = owner`\n\n\n4 `self.__balance = balance` `# \"__\" indicates this is a private attribute`\n\n\n5\n\n\n6 `def deposit(self, amount):`\n\n\n7 `if amount > 0:`\n\n\n8 `self.__balance += amount`\n\n9 `print(f\"Deposited: {amount}\")`\n\n\n10 `else:`\n\n\n11 `print(\"Invalid deposit amount.\")`\n\n\n12\n\n\n13 `def withdraw(self, amount):`\n\n\n14 `if 0 < amount <= self.__balance:`\n\n\n15 `self.__balance -= amount`\n\n\n8"
|
| 94 |
+
},
|
| 95 |
+
{
|
| 96 |
+
"idx": 4,
|
| 97 |
+
"page": 3,
|
| 98 |
+
"score": 1.3231226205825806,
|
| 99 |
+
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\nTương tự:\nGiảsửbạn là một người quản lý thư viện. Trong đó, sách và người đọc chính là những đối tượng\n(objects), còn các quy trình như mượn sách, trảsách, đăng ký thẻđược xem là phương thức\n(methods) – tức là hành vi của các đối tượng. Đểcó thểquản lý hiệu quảtất cảcác đối tượng\nvà hành vi trong hệthống thư viện này, ta cần một cách tổchức logic và linh hoạt. Chính từ\nnhu cầu đó, lập trình hướng đối tượng (OOP) ra đời – như một phương pháp giúp mô hình hóa\nthếgiới thực thành các thành phần trong phần mềm một cách rõ ràng và dễmởrộng.\n\n### **3 Class và Object**\n\n#### **3.1 Class (Lớp)**\n\n\nClass như một bản vẽkỹthuật hoặc template, dùng đểđịnh nghĩa thuộc tính (attributes) và\nphương thức (methods) của các đối tượng.\n\n - **Attributes:** định nghĩa các thông tin, đặc điểm cũng như các thuộc tính của Object.\n\n\n - **Method** : định nghĩa các hành vi, phương thức cũng như các hành động thường có của\nObject\n\n\n3"
|
| 100 |
+
}
|
| 101 |
+
],
|
| 102 |
+
"model_verdict": {
|
| 103 |
+
"supported": true,
|
| 104 |
+
"confidence": 0.99,
|
| 105 |
+
"evidence": "\"Biến `private` là thông tin tuyệt mật – chỉ lớp khai báo nó mới có quyền truy cập\"",
|
| 106 |
+
"reason": "Context explicitly mô tả biến private như vậy, nên đáp án private được chứng thực."
|
| 107 |
+
}
|
| 108 |
+
},
|
| 109 |
+
"3": {
|
| 110 |
+
"supported_by_embeddings": true,
|
| 111 |
+
"max_similarity": 1.127091884613037,
|
| 112 |
+
"evidence": [
|
| 113 |
+
{
|
| 114 |
+
"idx": 1,
|
| 115 |
+
"page": 1,
|
| 116 |
+
"score": 0.8878949880599976,
|
| 117 |
+
"text": "**Biến cục bộ(Local)**\n\n\nBiến cục bộchỉtồn tại và có thểsửdụng trong một hàm hoặc phương thức cụthể. **Quy tắc ưu tiên (Scope resolution):**\n\n\nLocal _>_ Instance _>_ Class _>_ Global (1)\n\n\n**Ví dụminh họa:**\n\n\n1 `class Cat():`\n\n\n2 `age = 1 #Class variabe`\n\n3 `def describe(self, age):`\n\n4 `print(age, age)` `# Ouput: 2,2 (both are local variables)`\n\n5 `print(self.age)` `# Output: 1 (class variable)`\n\n\n6\n\n\n7 `cat = Cat()`\n\n\n8 `cat.describe(2)`\n\n\n1"
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"idx": 0,
|
| 121 |
+
"page": 1,
|
| 122 |
+
"score": 1.107263207435608,
|
| 123 |
+
"text": "# Tuần 3: Tổng hợp kiến thức buổi học số3 + 4\n\n#### Time-Series Team Ngày 21 tháng 6 năm 2025\n\n\n\n\n## **Phần I: Khái niệm cơ bản vềObject-Oriented** **Programming: Lập tr��nh hướng đối tượng**\n\n### **1** **Giới thiệu vềlập trình hướng đối tượng**\n\nLập trình hướng đối tượng (OOP) là một phương pháp lập trình phổbiến, lấy các đối tượng làm\ntrung tâm đểgiải quyết vấn đềthực tế. Đểhiểu rõ OOP, ta cần nắm các khái niệm cơ bản như\nphạm vi biến, trừu tượng hóa, lớp, đối tượng và các tính chất đặc trưng như kếthừa, đa hình,\nđóng gói và trừu tượng. #### **1.1** **Bước đầu cho OOP - Khái niệm biến local và global (biến cục bộ** **và biến toàn cục)**\n\n\nPhạm vi (scope) biến là yếu tốquan trọng trong lập trình, quyết định nơi một biến có thểtruy\ncập được. **1.1.1** **Biến cục bộ(Local)**\n\n\nBiến cục bộchỉtồn tại và có thểsửdụng trong một hàm hoặc phương thức cụthể."
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"idx": 9,
|
| 127 |
+
"page": 6,
|
| 128 |
+
"score": 1.127091884613037,
|
| 129 |
+
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\ntiếp hoặc xửlý toàn bộlogic nội bộ, đối tượng sẽgọi đến phương thức của một thành phần bên\ntrong đểthực hiện nhiệm vụ. Kỹthuật này giúp tách biệt trách nhiệm giữa các lớp, dễbảo trì\nvà mởrộng hệthống và tăng tính tái sửdụng của mã nguồn."
|
| 130 |
+
}
|
| 131 |
+
],
|
| 132 |
+
"model_verdict": {
|
| 133 |
+
"supported": true,
|
| 134 |
+
"confidence": 0.99,
|
| 135 |
+
"evidence": "Biến cục bộ chỉ tồn tại và có thể sử dụng trong một hàm hoặc phương thức cụ thể.",
|
| 136 |
+
"reason": "Câu trả lời khớp với mô tả trong Context về đặc điểm của biến cục bộ."
|
| 137 |
+
}
|
| 138 |
+
},
|
| 139 |
+
"4": {
|
| 140 |
+
"supported_by_embeddings": true,
|
| 141 |
+
"max_similarity": 1.02956223487854,
|
| 142 |
+
"evidence": [
|
| 143 |
+
{
|
| 144 |
+
"idx": 5,
|
| 145 |
+
"page": 4,
|
| 146 |
+
"score": 0.7977743148803711,
|
| 147 |
+
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n#### **3.2** **Object (Đối tượng)**\n\n\nObject là một thực thểcụthểđược tạo ra từclass, chứa các giá trịthuộc tính cụthểvà khả\nnăng thực hiện các phương thức đã định nghĩa. ### **4 Cách tạo một Class**\n\n\nMột class diagram bao gồm: tên class, attributes, và methods. Sau khi khởi tạo, ta tạo ra một\nobject là instance của class vừa tạo. **Constructor (** **`__init__`** **):** được dùng đểtạo và gán giá trịban đầu cho các thuộc tính (attributes)\ncủa đối tượng.Nói một cách đơn giản, constructor giống như bản thiết kếban đầu giúp ta xác\nđịnh: ”Khi tạo ra một đối tượng mới, nó sẽcó những thông tin gì?”\n\n\n**Self keyword:** Là tham chiếu đến instance cụthểcủa class. **Ví dụ:**\n\n\n1 `class Rectangle:`\n\n2 `def __init__(self, width, height):`\n\n\n3 `self.width = width`\n\n\n4 `self.height = height`\n\n\n5\n\n\n6 `def area(self):`\n\n\n7 `return self.width * self.height`\n\n\n8\n\n\n9 `my_rec = Rectangle(4, 7)`\n\n10 `print(my_rec.area())` `# Output: 28`\n\n\nTa hình dung “self” là một vùn..."
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"idx": 0,
|
| 151 |
+
"page": 1,
|
| 152 |
+
"score": 1.02956223487854,
|
| 153 |
+
"text": "# Tuần 3: Tổng hợp kiến thức buổi học số3 + 4\n\n#### Time-Series Team Ngày 21 tháng 6 năm 2025\n\n\n\n\n## **Phần I: Khái niệm cơ bản vềObject-Oriented** **Programming: Lập trình hướng đối tượng**\n\n### **1** **Giới thiệu vềlập trình hướng đối tượng**\n\nLập trình hướng đối tượng (OOP) là một phương pháp lập trình phổbiến, lấy các đối tượng làm\ntrung tâm đểgiải quyết vấn đềthực tế. Đểhiểu rõ OOP, ta cần nắm các khái niệm cơ bản như\nphạm vi biến, trừu tượng hóa, lớp, đối tượng và các tính chất đặc trưng như kếthừa, đa hình,\nđóng gói và trừu tượng. #### **1.1** **Bước đầu cho OOP - Khái niệm biến local và global (biến cục bộ** **và biến toàn cục)**\n\n\nPhạm vi (scope) biến là yếu tốquan trọng trong lập trình, quyết định nơi một biến có thểtruy\ncập được. **1.1.1** **Biến cục bộ(Local)**\n\n\nBiến cục bộchỉtồn tại và có thểsửdụng trong một hàm hoặc phương thức cụthể."
|
| 154 |
+
}
|
| 155 |
+
],
|
| 156 |
+
"model_verdict": {
|
| 157 |
+
"supported": true,
|
| 158 |
+
"confidence": 0.98,
|
| 159 |
+
"evidence": "Những thông tin như ngày sinh, giới tính, sốđiện thoại... được xem là thuộc tính (attributes) của người dùng đó.",
|
| 160 |
+
"reason": "Context mô tả thuộc tính là các thông tin dữ liệu mô tả đối tượng, khớp với đáp án."
|
| 161 |
+
}
|
| 162 |
+
},
|
| 163 |
+
"5": {
|
| 164 |
+
"supported_by_embeddings": true,
|
| 165 |
+
"max_similarity": 1.0307352542877197,
|
| 166 |
+
"evidence": [
|
| 167 |
+
{
|
| 168 |
+
"idx": 5,
|
| 169 |
+
"page": 4,
|
| 170 |
+
"score": 0.9137221574783325,
|
| 171 |
+
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n#### **3.2** **Object (Đối tượng)**\n\n\nObject là một thực thểcụthểđược tạo ra từclass, chứa các giá trịthuộc tính cụthểvà khả\nnăng thực hiện các phương thức đã định nghĩa. ### **4 Cách tạo một Class**\n\n\nMột class diagram bao gồm: tên class, attributes, và methods. Sau khi khởi tạo, ta tạo ra một\nobject là instance của class vừa tạo. **Constructor (** **`__init__`** **):** được dùng đểtạo và gán giá trịban đầu cho các thuộc tính (attributes)\ncủa đối tượng.Nói một cách đơn giản, constructor giống như bản thiết kếban đầu giúp ta xác\nđịnh: ”Khi tạo ra một đối tượng mới, nó sẽcó những thông tin gì?”\n\n\n**Self keyword:** Là tham chiếu đến instance cụthểcủa class. **Ví dụ:**\n\n\n1 `class Rectangle:`\n\n2 `def __init__(self, width, height):`\n\n\n3 `self.width = width`\n\n\n4 `self.height = height`\n\n\n5\n\n\n6 `def area(self):`\n\n\n7 `return self.width * self.height`\n\n\n8\n\n\n9 `my_rec = Rectangle(4, 7)`\n\n10 `print(my_rec.area())` `# Output: 28`\n\n\nTa hình dung “self” là một vùn..."
|
| 172 |
+
},
|
| 173 |
+
{
|
| 174 |
+
"idx": 3,
|
| 175 |
+
"page": 2,
|
| 176 |
+
"score": 1.0307352542877197,
|
| 177 |
+
"text": "gười dùng chính là một đối tượng (object). Những thông tin như ngày sinh, giới tính, sốđiện thoại... được xem là thuộc tính (attributes)\ncủa người dùng đó. Còn các hành vi như đăng bài, thích (like), chia sẻ(share), bình luận, kết\nbạn... chính là những phương thức (methods) – tức là hành động mà đối tượng đó có thểthực\nhiện. Đây chính là cách mà lập trình hướng đối tượng mô hình hóa và tổchức các thực thểtrong\nthếgiới số. 2"
|
| 178 |
+
}
|
| 179 |
+
],
|
| 180 |
+
"model_verdict": {
|
| 181 |
+
"supported": true,
|
| 182 |
+
"confidence": 0.99,
|
| 183 |
+
"evidence": "Trong Python, `__call__` là một phương thức đặc biệt ... được sửdụng khi một đối tượng cần hành xử giống như một hàm. Nếu một lớp định nghĩa `__call__`, thì các instance của lớp đó có thể được gọi như một hàm thực sự.",
|
| 184 |
+
"reason": "Context explicitly states that __call__ is the special method allowing objects to be called like functions."
|
| 185 |
+
}
|
| 186 |
+
}
|
| 187 |
+
}
|
| 188 |
+
}
|
test/raw_resp.json
CHANGED
|
@@ -1,33 +1,33 @@
|
|
| 1 |
{
|
| 2 |
-
"id": "chatcmpl-
|
| 3 |
"choices": [
|
| 4 |
{
|
| 5 |
"finish_reason": "stop",
|
| 6 |
"index": 0,
|
| 7 |
"message": {
|
| 8 |
-
"content": "{\n \"supported\": true,\n \"confidence\":
|
| 9 |
-
"reasoning": "We need to
|
| 10 |
"role": "assistant"
|
| 11 |
}
|
| 12 |
}
|
| 13 |
],
|
| 14 |
-
"created":
|
| 15 |
"model": "gpt-oss-120b",
|
| 16 |
"system_fingerprint": "fp_e25f231b468af246abb0",
|
| 17 |
"object": "chat.completion",
|
| 18 |
"usage": {
|
| 19 |
-
"prompt_tokens":
|
| 20 |
-
"completion_tokens":
|
| 21 |
-
"total_tokens":
|
| 22 |
"prompt_tokens_details": {
|
| 23 |
"cached_tokens": 0
|
| 24 |
}
|
| 25 |
},
|
| 26 |
"time_info": {
|
| 27 |
-
"queue_time": 0.
|
| 28 |
-
"prompt_time": 0.
|
| 29 |
-
"completion_time": 0.
|
| 30 |
-
"total_time": 0.
|
| 31 |
-
"created":
|
| 32 |
}
|
| 33 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"id": "chatcmpl-787b594b-aa24-4f31-8471-5829b7e70301",
|
| 3 |
"choices": [
|
| 4 |
{
|
| 5 |
"finish_reason": "stop",
|
| 6 |
"index": 0,
|
| 7 |
"message": {
|
| 8 |
+
"content": "{\n \"supported\": true,\n \"confidence\": 1.0,\n \"evidence\": \"Lỗhổng này có mã CVE là **CVE-2024-51186** ... Đây là lỗhổng trong dịch vụ **ncc2** của thiết bị này.\",\n \"reason\": \"Context explicitly states that the command injection vulnerability in the ping diagnostic feature of the ncc2 service is assigned CVE-2024-51186.\"\n}",
|
| 9 |
+
"reasoning": "We need to output JSON with fields: supported (true/false), confidence, evidence, reason. The question: \"Mã CVE nào được gán cho lỗhổng command injection trong tính năng chuẩn đoán \"ping\" của dịch vụ ncc2?\" The answer given: CVE-2024-51186. We need to check if the context supports that answer. In context, we see: \"[page 19] ... Lỗhổng này có mã CVE là **CVE-2024-51186** [13]. Đây là lỗhổng trong dịch vụ **ncc2** của thiết bị này.\" So yes, supported. Provide evidence snippet. Provide confidence maybe 1.0. Reason: supported because context explicitly states. Return JSON only.",
|
| 10 |
"role": "assistant"
|
| 11 |
}
|
| 12 |
}
|
| 13 |
],
|
| 14 |
+
"created": 1755747130,
|
| 15 |
"model": "gpt-oss-120b",
|
| 16 |
"system_fingerprint": "fp_e25f231b468af246abb0",
|
| 17 |
"object": "chat.completion",
|
| 18 |
"usage": {
|
| 19 |
+
"prompt_tokens": 900,
|
| 20 |
+
"completion_tokens": 270,
|
| 21 |
+
"total_tokens": 1170,
|
| 22 |
"prompt_tokens_details": {
|
| 23 |
"cached_tokens": 0
|
| 24 |
}
|
| 25 |
},
|
| 26 |
"time_info": {
|
| 27 |
+
"queue_time": 0.000998586,
|
| 28 |
+
"prompt_time": 0.033603526,
|
| 29 |
+
"completion_time": 0.154331273,
|
| 30 |
+
"total_time": 0.20377373695373535,
|
| 31 |
+
"created": 1755747130
|
| 32 |
}
|
| 33 |
}
|
test/text_chunks.md
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
['##### TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC\n\n##### TS. BÙI XUÂN DIỆU\n\n## **Bài Giảng** G IẢI TÍCH II\n\n##### (lưu hành nội bộ) C ÁC ỨNG DỤNG CỦA PHÉP TÍNH VI PHÂN, T ÍCH PHÂN BỘI, T ÍCH PHÂN PHỤTHUỘC THAM SỐ, T ÍCH PHÂN ĐƯỜNG, T ÍCH PHÂN MẶT, L Ý THUYẾT\n\nTRƯỜNG\n\n##### Tóm tắt lý thuyết, các ví dụ, bài tập và lời giải **Hà Nội- 2017** (bản cập nhật Ngày 28 tháng 8 năm 2017)', 'Tập Bài giảng vẫn đang trong quá trình hoàn thiện và có thểchứa những lỗi đánh\nmáy, những lỗi kí hiệu và những chỗsai chưa được kiểm tra hết. Tác giảmong nhận được\nsựđóng góp ý kiến đểtập Bài giảng được hoàn thiện. Mọi ý kiến đóng góp xin vui lòng gửi\nvềđịa chỉ“dieu.buixuan@hust.edu.vn”\n\n\n_Hà Nội, Ngày 28 tháng 8 năm 2017._', '## **M**\n### **ỤC LỤC**\n\n**. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .** **1**\n## **Mục lục**\n\n\n**Chương 1 . Các ứng dụng của phép tính vi phân trong hình học. . . . . . .** **5**\n\n\n1 Các ứng dụng của phép tính vi phân trong hình học phẳng . . . . . . . . . . 5\n1.1 Đường cong trong mặt phẳng **R** [2] . . . . . . . . . . . . . . . . . . . . . . 5\n\n1.2 Độcong của đường cong. . . . . . . . . . . . . . . . . . . . . . . . . . . 9\n1.3 Hình bao của họđường cong phụthuộc một tham số. . . . . . . . . . 9\n\n2 Các ứng dụng của phép tính vi phân trong hình học không gian . . . . . . . 13\n\n2.1 Hàm véctơ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13\n\n2.2 Đường cong trong không gian **R** [3] . . . . . . . . . . . . . . . . . . . . . 13\n\n2.3 Độcong của đường cong . . . . . . . . . . . . . . . . . . . . . . . . . . 14\n2.4 Mặt cong trong không gian **R** [3] . . . . . . . . . . . . . . . . . . . . . . . 15\n\n2.5 Đường cong cho dưới dạng giao của hai mặt cong . . . . . . . . . . . . 18\n**Chương 2 . Tích phân bội . . . . . . . . . . . . . . . . . . . . . . . . . .** **23**\n\n\n1 Tích phân kép . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .', '. . 23\n\n1.1 Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23\n\n1.2 Tính tích phân kép trong hệtoạđộDescartes . . . . . . . . . . . . . . 28\n1.3 Phép đổi biến sốtrong tích phân kép . . . . . . . . . . . . . . . . . . . 39\n\n1.4 Bài tập ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51\n\n2 Tích phân bội ba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54\n2.1 Định nghĩa và tính chất . . . . . . . . . . . . . . . . . . . . . . . . . . 54\n\n2.2 Tính tích phân bội ba trong hệtoạđộDescartes . . . . . . . . . . . . 54\n2.3 Đổi biến sốtrong tích phân bội ba . . . . . . . . . . . . . . . . . . . . . 58\n\n2.4 Bài tập ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74\n\n3 Các ứng dụng của tích phân bội . . . . . . . . . . . . . . . . . . . . . . . . . . 76\n3.1 Tính diện tích hình phẳng . . . . . . . . . . . . . . . . . . . . . . . . . 76\n3.2 Tính thểtích vật thể . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82\n\n3.3 Tính diện tích mặt cong . . . . . . . . . . . . . . . . . . . . . . . . . . 89\n\n\n1', '_2_ _MỤC LỤC_\n\n\n3.4 Bài tập ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89\n**Chương 3 . Tích phân phụthuộc tham số. . . . . . . . . . . . . . . . . . .** **91**\n\n\n1 Tích phân xác định phụthuộc tham số. . . . . . . . . . . . . . . . . . . . . . 91\n\n1.1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91\n1.2 Các tính chất của tích phân xác định phụthuộc tham số. . . . . . . . 91\n1.3 Các tính chất của tích phân phụthuộc tham sốvới cận biến đổi. . . . 94\n\n1.4 Bài tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95\n2 Tích phân suy rộng phụthuộc tham số. . . . . . . . . . . . . . . . . . . . . . 98\n2.1 Các tính chất của tích phân suy rộng phụthuộc tham số. . . . . . . . 98\n\n2.2 Bài tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107\n2.3 Một sốtích phân quan trọng . . . . . . . . . . . . . . . . . . . . . . . . 112\n\n2.4 Bài tập ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112\n\n3 Tích phân Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116\n\n3.1 Hàm Gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .', '116\n\n3.2 Hàm Beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117\n\n3.3 Bài tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120\n\n**Chư��ng 4 . Tích phân đường. . . . . . . . . . . . . . . . . . . . . . . . . 123**\n\n\n1 Tích phân đường loại I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123\n\n1.1 Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123\n\n1.2 Các công thức tính tích phân đường loại I . . . . . . . . . . . . . . . . 124\n\n1.3 Bài tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124\n\n1.4 Bài tập ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126\n\n2 Tích phân đường loại II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128\n\n2.1 Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128\n\n2.2 Các công thức tính tích phân đường loại II . . . . . . . . . . . . . . . . 128\n\n2.3 Công thức Green. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131\n2.4 Ứng dụng của tích phân đường loại II . . . . . . . . . . . . . . . . . .', '137\n2.5 Điều kiện đểtích phân đường không phụthuộc đường lấy tích phân. 139\n**Chương 5 . Tích phân mặt . . . . . . . . . . . . . . . . . . . . . . . . . . 143**\n\n\n1 Tích phân mặt loại I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143\n\n1.1 Diện tích mặt cong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143\n1.2 Bài toán dẫn đến tích phân mặt loại I . . . . . . . . . . . . . . . . . . 145\n\n1.3 Các công thức tính tích phân mặt loại I . . . . . . . . . . . . . . . . . 147\n\n1.4 Bài tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147\n\n2 Tích phân mặt loại II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150\n\n2.1 Định hướng mặt cong . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150\n2.2 Bài toán dẫn đến tích phân mặt loại II . . . . . . . . . . . . . . . . . . 151\n\n\n2', '_MỤC LỤC_ _3_\n\n\n2.3 Các công thức tính tích phân mặt loại II . . . . . . . . . . . . . . . . . 153\n\n2.4 Công thức Ostrogradsky . . . . . . . . . . . . . . . . . . . . . . . . . . 157\n\n2.5 Công thức Stokes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160\n\n2.6 Công thức liên hệgiữa tích phân mặt loại I và loại II . . . . . . . . . 161\n**Chương 6 . Lý thuyết trường. . . . . . . . . . . . . . . . . . . . . . . . . 165**\n\n\n1 Trường vô hướng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165\n\n1.1 Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165\n\n1.2 Đạo hàm theo hướng . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165\n\n1.3 Gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166\n\n1.4 Bài tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n\n2 Trường véctơ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169\n\n2.1 Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169\n2.2 Thông lượng, dive, trường ống . . . . . . . . . . . . . . . . . . . . . . . 169\n\n2.3 Hoàn lưu, véctơ xoáy . . . . . . . . . . . . . . .', '. . . . . . . . . . . . . 169\n2.4 Trường thế- hàm thếvị . . . . . . . . . . . . . . . . . . . . . . . . . . 170\n\n2.5 Bài tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170\n\n\n3', '_4_ _MỤC LỤC_\n\n\n4', '# **CHƯƠNG 1**\n\n## **C ÁC ỨNG DỤNG CỦA PHÉP TÍNH VI PHÂN**\n\n### **TRONG HÌNH HỌC**\n\n#### § 1. C ÁC ỨNG DỤNG CỦA PHÉP TÍNH VI PHÂN TRONG\n##### **HÌNH HỌC PHẲNG**\n\n#### R [2] . **1.1 Đường cong trong mặt phẳng**\n\nỞchương trình học phổthông, chúng ta đã làm quen với khái niệm đường cong cho bởi\nphương trình y = f ( x ), chẳng hạn như đường parabol y = x [2], đường cong bậc ba y = x [3] .\nTuy nhiên, không phải lúc nào cũng "may mắn" biểu diễn một đường cong được dưới dạng\ny = f ( x ), vì có thểvới một giá trị x = x 0, ứng với nó có hai hoặc nhiều hơn giá trị y tương\nứng. Chẳng hạn như, tưởng tượng rằng có một hạt chuyển động dọc theo đường cong C\nnhư hình vẽdưới đây. Đường cong C này không thểbiểu diễn được dưới dạng y = f ( x ) .\n\n\nTuy nhiên, các tọa độ x và y của hạt này là một hàm sốphụthuộc thời gian t. Chính vì vậy\nsẽlà thuận lợi nếu ta biểu diễn đường cong C dưới dạng x = f ( t ), y = g ( t ) . Đây chính là\n\n\n5', '_6_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\nphương trình đường cong cho dưới dạng tham sốđã được giới thiệu ởhọc phần Giải tích I.\n\n\n**Ví dụ1.1 (Đường Cycloid).** Giảsửcó một bánh xe hình tròn và cốđịnh một điểm P trên\nbánh xe đó. Cho bánh xe đó lăn không trượt trên một đường thẳng. Quỹtích điểm P đó\nđược gọi là đường Cycloid. Hãy viết phương trình tham sốcủa đường cong này.\n\n\ny\n\n\n\n\n\n\n\nx\nx\n\n\n\na _θ_\n\n\n\n2 _π_ a\n\n\n\n\n[Lời giải] Giảsửbánh xe có bán kính r và điểm xuất phát của P là gốc tọa độ, đồng\nthời cho bánh xe lăn không trượt trên trục Ox . Gọi _θ_ là góc quay của bánh xe ( _θ_ = 0 nếu P\nởgốc tọa độ). Khi đó, vì bánh xe lăn không trượt, nên\n\n\nOT = độdài cung PT = r _θ_ .\n\n\n\nDo đó,\n\uf8f1\n\uf8f2\n\n\n\ny = | TC | −| QC | = r − r cos _θ_ = r ( 1 − cos _θ_ ) .\n\n\n\nx = | OT | −| PQ | = r _θ_ − r sin _θ_ = r ( _θ_ − sin _θ_ )\n\n\uf8f2\n\n\uf8f3y = | TC | −| QC | = r − r cos _θ_ = r ( 1 − cos _θ_ ) .\n\n\n\nMột sốđiều thú vịvềđường Cycloid.\n\n\n Một trong những người đầu tiên nghiên cứu đường cong Cycloid là Galileo. Ông đề\nxuất rằng các cây cầu nên được xây theo đường cong Cycloid và cũng là người đi tìm\ndiện tích của miền nằm phía dưới một cung Cycloid.\n\n\n6', '_1. Các ứng dụng của phép tính vi phân trong hình học phẳng_ _7_\n\n\n Đường cong Cycloid này vềsau xuất hiện trong bài toán "Brachistochrone" sau. Cho\nhai điểm A và B sao cho điểm A cao hơn điểm B. Hãy tìm đường cong nối A với B\n\nsao cho khi ta thảmột viên bi từ A, viên bi chạy theo đường cong đó (dưới tác dụng\ncủa lực hấp dẫn) từ A đến B với thời gian ngắn nhất. Nhà toán học người Thụy Sĩ,\nJohn Bernoulli đã chỉra rằng, trong sốtất cảcác đường cong nối A với B thì viên bi\nsẽmất ít thời gian nhất đểlăn từ A đến B nếu nó đi theo đường Cycloid. Nhà vật lý người Hà Lan, Huyghens, cũng đã chỉra rằng đường cong Cycloid là lời\n\ngiải cho bài toán "Tautochrone" sau. Cho dù đặt viên bi ởđâu trên cung Cycloid\nngược thì nó cũng mất một khoảng thời gian như nhau đểlăn vềđáy. Điều này được\nứng dụng khi ông phát minh ra đồng hồquảlắc. Ông đềxuất rằng quảlắc nên được\nlắc theo cung Cycloid, bởi vì khi đó con lắc sẽmất một khoảng thời gian như nhau\nđểhoàn thành một chu kì dao động, cho dù là nó lắc theo một cung dài hay là ngắn. 1. Điểm chính quy. - Cho đường cong ( L ) xác định bởi phương trình f ( x, y ) = 0.', 'Điểm M ( x 0, y 0 )\nđược gọi là điểm chính quy của đường cong ( L ) nếu tồn tại các đạo hàm riêng\nf x ′ [(] [M] [)] [,][ f] y ′ [(] [M] [)] [ không đồng thời bằng 0.]\n\n\n\n= t . y y ( )\n\n\n\n\n- Cho đường cong ( L ) xác định bởi phương trình tham số\n\n\n\n\uf8f1\n\uf8f2\n\n\n\nx = x t\n( )\n\n\uf8f2\n\n\uf8f3y = y ( t )\n\n\n\nĐiểm M ( x ( t 0 ), y ( t 0 )) được gọi là điểm chính quy của đường cong ( L ) nếu tồn\ntại các đạo hàm x [′] ( t 0 ), y [′] ( t 0 ) không đồng thời bằng 0. 7', '_8_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\n Một điểm không phải là điểm chính quy được gọi là điểm kì dị. 2. Phương trình tiếp tuyến và pháp tuyến của đường cong. - Chúng ta biết rằng hệsốgóc k của tiếp tuyến của đường cong C tại điểm M\nchính là y [′] x [(] [M] [)] [. Do đó, nếu đường cong cho bởi phương trình][ f] [ (] [x][,][ y] [) =] [ 0][ thì nó]\nxác định một hàm ẩn y = y ( x ) và đạo hàm của nó tính theo công thức\n\n\nx\nk = y [′] x [=][ −] [f] [ ′] . f y [′]\n\n\nVậy\n\n\n**–** Phương trình tiếp tuyến tại M là\n\n\n\nx [(] [M] [)]\n( d ) : y − y 0 = − [f] [ ′]\nf y [′] ( M ) [(] [x] [ −] [x] [0] [)]\n\n\n′ ′\n⇔ f x [(] [M] [)] [ .] [ (] [x] [ −] [x] [0] [) +] [ f] y [(] [M] [)] [ .] [ (] [y] [ −] [y] [0] [) =] [ 0.]\n\n\n**–** Phương trình pháp tuyến tại M là\n\n\n\n(1.1)\n\n\n\n�d [′] [�] : x ′ − x 0 [y] ′ [ −] [y] [0]\nf x [(] [M] [)] [=] f y [(] [M] [)] [.]\n\n\n**Chú ý:** Trường hợp đặc biệt, đường cong cho bởi phương trình y = f ( x )\nthì phương trình tiếp tuyến của đường cong tại điểm M ( x 0, y 0 ) chính quy là\ny − y 0 = f [′] ( x 0 )( x − x 0 ) . Đây là công thức mà học sinh đã biết trong chương\ntrình phổthông.', '- Nếu đường cong ( C ) cho bởi phương trình tham số\n\n\n\n\uf8f1\n\uf8f2\n\n\n\nx = x t\n( )\n\n\uf8f2\n\n\uf8f3y = y ( t )\n\n\n\nthì\ny = y ( t )\n\n\n\nk = y [′] x [=] [d][y]\n\n\n\n\n[d][y] [d][y][/][dt]\n\ndx [=] dx/dt\n\n\n\nt\n\n[d][y][/][dt] [y] [′] . dx/dt [=] x t [′]\n\n\n\nDo đó,\n\n\n**–** Phương trình tiếp tuyến tại điểm M ( x ( t 0 ), y ( t 0 )) chính quy:\n\n\n\n( d ) : y − y ( t 0 ) = [y] [′] [(] [t] [0] [)]\n\n\n\n\n[x] [(] [t] [0] [)] [(] [t] [0] [)]\n\n= [y] [ −] [y]\nx [′] ( t 0 ) y [′] ( t 0 )\n\n\n\n\n[(] [t] [0] [)]\n\n[y] [′] [(] [t] [0] [)]\n\nx [′] ( t 0 ) [(] [x] [ −] [x] [(] [t] [0] [)][ ⇔] [x] [ −] x [′] ( [x] t 0 )\n\n\n\ny [′] ( t 0 ) . Nói cách khác, véc tơ tiếp tuyến của đường cong C tại điểm M ( x ( t 0 ), y ( t 0 ))\nlà ⃗ n = ( x [′] ( t 0 ), y [′] ( t 0 )) . **–** Phương trình pháp tuyến tại M:\n\n\n�d [′] [�] : x [′] ( t 0 ) . ( x − x ( t 0 )) + y [′] ( t 0 ) . ( y − y ( t 0 )) = 0. 8', '_1. Các ứng dụng của phép tính vi phân trong hình học phẳng_ _9_\n\n#### **1.2 Độcong của đường cong.**\n\n\n1. Định nghĩa. 2. Các công thức tính độcong của đường cong tại một điểm. - Nếu đường cong cho bởi phương trình y = f ( x ) thì:\n\n\n| y [′′] |\nC ( M ) =\n\n( 1 + y [′] [2] ) [3/2]\n\n\n\nthì:\ny = y ( t )\n\n\n\n\nNếu đường cong cho bởi phương trình tham số\n\n\n\n\uf8f1\n\uf8f2\n\n\n\nx = x t\n( )\n\n\uf8f2\n\n\uf8f3y = y ( t )\n\n\n\nC ( M ) =\n\n\n\n( x [′] [2] + y [′] [2] ) [3/2]\n\n\n\nx [′]\ny [′]\n����x [′′] ����\n� y [′′] �\n\n\n\n\n- Nếu đường cong cho bởi phương trình trong toạđộcực r = r ( _ϕ_ ) thì:\n\n\n\nC ( M ) =\n\n\n\n�r 2 + 2r ′ 2 − rr ′′ �\n� �\n\n( r [2] + r [′] [2] ) [3/2]\n\n\n#### **1.3 Hình bao của họđường cong phụthuộc một tham** **số**\n\n1. Định nghĩa:\n\n\n**Định nghĩa 1.1.** Cho họđường cong ( L ) phụthuộc vào một hay nhiều tham số. Nếu\nmỗi đường cong trong họ ( L ) đều tiếp xúc với đường cong ( E ) tại một điểm nào đó\ntrên E và ngược lại, tại mỗi điểm thuộc ( E ) đều tồn tại một đường cong của họ ( L )\ntiếp xúc với ( E ) tại điểm đó thì ( E ) được gọi là hình bao của họđường cong ( L ) . 2. Quy tắc tìm hình bao của họđường cong phụthuộc một tham số. **Định lý 1.1.** Cho họđường cong F ( x, y, c ) = 0 phụthuộc một tham số c .', 'Nếu họ\nđường cong trên không có điểm kì dịthì hình bao của nó được xác định bằng cách\n\nkhử c từhệphương trình\n\uf8f1\n\nF ( x, y, c ) = 0\n\n′ (1.2)\n\n\uf8f2\n\n\n\nF ( x, y, c ) = 0\n\n\n′\n\n\uf8f2\n\n\uf8f3F c [(] [x][,][ y][,][ c] [) =]\n\n\n\n′ (1.2)\nF c [(] [x][,][ y][,][ c] [) =] [ 0]\n\n\n\n9', '_10_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\n3. Nếu họđường cong đã cho có điểm kì dịthì hệphương trình (1.2) bao gồm hình bao\n( E ) và quỹtích các điểm kì dịthuộc họcác đường cong đã cho. **Bài tập 1.1.** Viết phương trình tiếp tuyến và pháp tuyến với đường cong:\n\n\na) y = x [3] + 2x [2] − 4x − 3 tại (− 2, 5 ) . Phương trình pháp tuyến x = − 2\n\n\n\n_Lời giải_ . \uf8f1\n\uf8f2\n\n\n\n\uf8f2Phương trình tiếp tuyến y = 5\n\nPhương trình pháp tuyến x =\n\n\uf8f3\n\n\n\nb) y = e [1] [−] [x] [2] tại giao điểm của đường cong với đường thằng y = 1 . Phương trình pháp tuyến x + 2y − 1 = 0\n\n\n\n_Lời giải_ . **–** Tại M 1 (− 1, 1 ),\n\n\n\n\uf8f1\n\uf8f2\n\n\n\n\uf8f2Phương trình tiếp tuyến 2x − y + 3 = 0\n\n\uf8f3Phương trình pháp tuyến x + 2y − 1 =\n\n\n\nPhương trình pháp tuyến x − 2y + 1 = 0\n\n\n\n**–** Tại M 2 (− 1, 1 ),\n\n\n\n\uf8f1\n\uf8f2\n\n\n\n\uf8f2Phương trình tiếp tuyến 2x + y − 3 = 0\n\n\uf8f3Phương trình pháp tuyến x − 2y + 1 =\n\n\n\nc. x = [1] [+] [t]\n\nt [3]\n3\n\n� y = 2t [3]\n\n\n\nt [3]\n3\ny = 2t [3] [+] 2 [1]\n\n\n\ntại A ( 2, 2 ) . [1]\n\n2t\n\n\n\n_Lời giải_ . **–** Phương trình tiếp tuyến y = x. **–** Phương trình pháp tuyến x + y − 4 = 0. 2 2\nd. x 3 + y 3 = 5 tại M ( 8, 1 ) . _Lời giải_ . **–** Phương trình tiếp tuyến x + 2y − 10 = 0.', '**–** Phương trình pháp tuyến 2x − y − 15 = 0. **Bài tập 1.2.** Tính độcong của:\n\n\na. y = − x [3] tại điểm có hoành độ x = 2 [1] [.]\n\n\n_Lời giải_ . | y [′′] |\nC ( M ) =\n\n\n\n125\n\n\n\n| y |\n\n[=] [ ...] [ =] [ 192]\n( 1 + y [′] [2] ) [3/2] 125\n\n\n\nb. x = a ( t − sin t )\n( a - 0 ) tại điểm bất kì. = a 1 − cos t\n� y ( )\n\n\n10', '_1. Các ứng dụng của phép tính vi phân trong hình học phẳng_ _11_\n\n\n_Lời giải_ . ����\n�\n\n\n\nC ( M ) =\n\n\n\n� x y � 1\n\n[=] [ ...] [ =]\n( x [′] [2] + y [′] [2] ) [3/2] 2a\n\n\n\nx [′]\ny [′]\n���� x [′′]\n� y [′′]\n\n\n\nx [′′]\ny [′′]\n\n\n\n2a ~~√~~\n\n\n\n2\n\n\n\n1\n\n~~√~~ 1 − cos t\n\n\n\n1\n\n~~√~~ 1 −\n\n\n\n2 2 2\nc. x 3 + y 3 = a 3 tại điểm bất kì ( a - 0 ) . _Lời giải_ . Ph��ơng trình tham số:\n\n\n\nx = a cos [3] t\n= a sin [3] t [, nên]\n� y\n\n\n\n����\n�\n\n\n\nC ( M ) =\n\n\n\n� x y � 1\n\n[=] [ ...] [ =]\n( x [′] [2] + y [′] [2] ) [3/2] 3a | sin t cos t |\n\n\n\nx [′]\ny [′]\n���� x [′′]\n� y [′′]\n\n\n\nx [′′]\ny [′′]\n\n\n\nd. r = ae [b] _[ϕ]_, ( a, b - 0 )\n\n\n_Lời giải_ . C ( M ) =\n\n\n\n�r 2 + 2r ′ 2 − rr ′′ �\n� �\n\n\n\n+ 2r − rr 1\n� =\n\n( r [2] + r [′] [2] ) [3/2] ae [b] _[ϕ]_ ~~[√]~~\n\n\n\nae [b] _[ϕ]_ ~~[√]~~\n\n\n\n1 + b [2]\n\n\n\n**Bài tập 1.3.** Tìm hình bao của họđường cong sau:\n\n\na. y = [x] c [+] [ c] [2]\n\n\nb. cx [2] + c [2] y = 1\n\n\nc. = c [2] x − c\ny ( ) [2]\n\n\n_Lời giải_ . a. Đặt F ( x, y, c ) : = y − [x] c [−] [c] [2] [ =] [ 0][.]\n\nĐiều kiện: c ̸= 0. Xét hệphương trình: F x [′] [(] [x][,][ y][,][ c] [) =] [ 0] F x [′] [(] [x][,][ y][,][ c] [) =] [ 0]\n\n� F y [′] [(] [x][,][ y][,][ c] [) =] [ 0] [ ⇔] � 1 = 0.', 'Hệphương trình vô nghiệm nên họđường cong không có điểm kì dị. Ta có\n\nF ( x, y, c ) = 0 y − [x] c [−] [c] [2] [ =] [ 0] ⇔ x = 2c [3]\n� F c [′] [(] [x][,][ y][,][ c] [) =] [ 0] [ ⇔] � − 2c + c [x] [2] [=] [ 0] � y = 3c [2]\n\n\n\nXét hệphương trình:\n\n\n\nF x [′] [(] [x][,][ y][,][ c] [) =] [ 0]\n� F y [′] [(] [x][,][ y][,][ c] [) =] [ 0] [ ⇔]\n\n\n\n− [x]\ny c\n\n\n− 2c\n\n�\n\n\n\n− [x]\ny c [−] [c] [2] [ =] [ 0]\n\n− 2c + [x] [=] [ 0]\n\n\n\ny = 3c [2]\n\n\n\n⇔\nc [x] [2] [=] [ 0]\n\n\n\nx = 2c [3]\n� y = 3c [2]\n\n\n\nx 2 y\n\n−\n2 � � 3\n\n\n\nnên x\n� 2\n\n\n\ny3 � 3 = 0. Do điều kiện c ̸= 0 nên x, y ̸= 0. Vậy ta có hình bao của họ\n\n\n\nx 2 y\n\n−\n2 � � 3\n\n\n\nđường cong là đường � 2x\n\n\n\ny 3\n\n3 � = 0 trừđiểm O ( 0, 0 ) . 11', '_12_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\nb. Đặt F ( x, y, c ) : = cx [2] + c [2] y − 1 = 0. Nếu c = 0 thì không thoảmãn phương trình đã\ncho nên điều kiện: c ̸= 0. 2cx = 0\n⇔ x = c = 0, nhưng điểm kì\nc [2] = 0\n�\n\n\n\nXét hệphương trình:\n\n\n\nF x [′] [(] [x][,][ y][,][ c] [) =] [ 0]\n⇔\n� F y [′] [(] [x][,][ y][,][ c] [) =] [ 0]\n\n\n\ndịđó không thuộc họđường cong đã cho nên họđường cong đã cho không có điểm kì\n\ndị. Ta có\nF ( x, y, c ) = 0 cx [2] + c [2] y = 1 ⇔ x = [2] c\n� F c [′] [(] [x][,][ y][,][ c] [) =] [ 0] [ ⇔] � x [2] + 2cx = 0 � y = [−] c [2] [1]\n\nDo đó x, y ̸= 0 và ta có hình bao của họđường cong là đường y = − [x] 4 [4] [trừđiểm][ O] [(] [0, 0] [)] [.]\n\n\n\ncx [2] + c [2] y = 1\n⇔\nx [2] + 2cx = 0\n�\n\n\n\nx = [2]\n\nc\n\n� y =\n\n\n\nc\n= [−] [1]\ny [2]\n\n\n\nc [2]\n\n\n\nDo đó x, y ̸= 0 và ta có hình bao của họđường cong là đường y = − [x] 4 [4]\n\n\n\nc. Đặt F ( x, y, c ) : = c [2] ( x − c ) [2] − y = 0. Xét hệphương trình: F x [′] [(] [x][,][ y][,][ c] [) =] [ 0] F x [′] [=] [ 0]\n\n� F y [′] [(] [x][,][ y][,][ c] [) =] [ 0] [ ⇔] � − 1 = 0. Hệphương trình vô nghiệm nên họđường cong đã cho không có điểm kì dị.', 'Ta có\n\n\uf8f1F ( x, y, c ) = 0 \uf8f1c [2] ( x − c ) [2] − y = 0 ( 1 )\n\n⇔\n\n\uf8f2 \uf8f2\n\n[′] [2]\n\n\n\nXét hệphương trình:\n\n\n\nF x [′] [(] [x][,][ y][,][ c] [) =] [ 0]\n� F y [′] [(] [x][,][ y][,][ c] [) =] [ 0] [ ⇔]\n\n\n\n2c ( x − c ) − 2c [2] ( x − c ) = 0. ( 2 )\n\n\n\n\uf8f2F ( x, y, c ) = 0\n\n\uf8f3F c [′] [(] [x][,][ y][,][ c] [) =]\n\n\n\n⇔\nF c [′] [(] [x][,][ y][,][ c] [) =] [ 0]\n\n\n\n\uf8f1\n\uf8f2\n\n\n\n\uf8f2c [2] ( x − c ) [2] − y = 0 ( 1 )\n\n2c ( x − c ) − 2c [2] ( x − c ) = 0. ( 2 )\n\n\uf8f3\n\n\n\n, thếvào ( 1 ) ta được y = 0, y = 16 [x] [4] [.]\n\n\n\n( 2 ) ⇔\n\n\n\n\uf8ee\n\n\n\n\uf8ee c = 0\n\nc = x\n\nc = [x]\n\uf8ef\uf8f0 2\n\n\n\n2\n\n\n\nVậy hình bao của họđường cong là y = 0, y = 16 [x] [4] [.]\n\n\n12', '_2. Các ứng dụng của phép tính vi phân trong hình học không_ _gian_ _13_\n\n#### § 2. C ÁC ỨNG DỤNG CỦA PHÉP TÍNH VI PHÂN TRONG\n\n##### **HÌNH HỌC KHÔNG GIAN**\n\n#### **2.1 Hàm véctơ**\n\n\nGiảsử I là một khoảng trong **R** . - Ánh xạ I → **R** [n], t �→ r [−−→] ( t ) ∈ **R** [n] được gọi là hàm véctơ của biến số t xác định trên **R** . Nếu n = 3, ta viết\n−−→\nr ( t ) = x ( t ) . [−→] i + y ( t ) . [−→] j + z ( t ) . [−→] k . Đặt M ( x ( t ), y ( t ), z ( t )), quỹtích M khi t biến thiên trong I được gọi là tốc đồcủa\nhàm véctơ r [−−→] ( t ) . - **Giới hạn:** Người ta nói hàm véctơ có giới hạn là [−→] a khi t → t 0 nếu\n\n\n\nlim\nt → t 0\n\n\n\n−−→\nr ( t ) − [−→] a = −→ 0,\n��� ���\n\n\n\nkí hiệu lim\nt → t 0\n\n\n\n−−→\nr t [−→] a . ( ) =\n\n\n\n\n- **Liên tục:** Hàm véctơ r [−−→] ( t ) xác định trên I được gọi là liên tục tại t 0 ∈ I nếu\n\n\n\nlim\nt → t 0\n\n\n\nr −−→ ( t ) = r [−−→] ( t 0 ) .', '(Tuơng đương với tính liên tục của các thành phần tương ứng x ( t ), y ( t ), z ( t ) )\n\n\n- **Đạo hàm:** Giới hạn, nếu có, của tỉsố\n\n\n\n∆ [−→] r\nlim = lim\nh → 0 h h → 0\n\n\n\n−→\nr ( t 0 + h ) −−→ r ( t 0 )\n\nh\n\n\n\nđược gọi là đạo hàm của hàm véctơ r [−−→] ( t ) tại t 0, kí hiệu [−→] r [′] ( t 0 ) hay [d] [−→] [r] dt [(] [t] [0] [)]\n\n\n\ndt [0], khi đó ta\n\n\n\nnói hàm véctơ r [−−→] ( t ) khảvi tại t 0 . **Nhận xét:** nếu x ( t ), y ( t ), z ( t ) khảvi tại t 0 thì r [−−→] ( t ) cũng khảvi tại t 0 và\n\n\n\n−→ r ′ ( t 0 ) = x ′ ( t 0 ) . [−→] i + y ′ ( t 0 ) . [−→] j + z ′ ( t 0 ) . [−→] k . #### 2.2 Đường cong trong không gian R [3]\n\n\nTương tựnhư cách chúng ta biểu diễn đường cong trong không gian **R** [2] bởi phương\ntrình tham số, mỗi đường cong trong không gian **R** [3] được định nghĩa, một cách đơn giản,\n\nlà một hàm véc tơ\n_γ_ : [ a, b ] → **R** [3], _γ_ ( t ) = x ( t ) . [⃗] i + y ( t ) . [⃗] j + z ( t ) . [⃗] k. 13', '_14_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\nĐường cong _γ_ được gọi là trơn nếu như tồn tại _γ_ [′] ( t ) liên tục và _γ_ [′] ( t ) ̸= 0 với mọi t ∈\n\n\n\nlà\ny = y ( t )\n\n\n\n\n[ a, b ] . Nếu như trong mặt phẳng, một véc tơ tiếp tuyến của đường cong\n\n\n\n\uf8f1\n\uf8f2\n\n\n\nx = x ( t )\n\n\uf8f2\n\n\uf8f3y = y ( t )\n\n\n\n⃗\nn = ( x [′] ( t ), y [′] ( t )) thì trong không gian, một cách hoàn toàn tương tự, một véc tơ tiếp tuyến\ncủa đường cong _γ_ ( t ) = x ( t ) . [⃗] i + y ( t ) . [⃗] j + z ( t ) . [⃗] k là _γ_ [′] ( t ) = x [′] ( t ) . [⃗] i + y [′] ( t ) . [⃗] j + z [′] ( t ) . [⃗] k. Do đó,\n\n\n - Phương trình tiếp tuyến của _γ_ tại điểm M ( x 0, y 0, z 0 ) chính quy:\n\n\n\n\n[x] [(] [t] [0] [)] [(] [t] [0] [)]\n\n= [y] [ −] [y]\nx [′] ( t 0 ) y [′] ( t 0 )\n\n\n\nz [′] ( t 0 ) . [(] [t] [0] [)]\n( d ) : [x] [ −] [x]\n\n\n\n\n[y] [(] [t] [0] [)] [(] [t] [0] [)]\n\n= [z] [ −] [z]\ny [′] ( t 0 ) z [′] ( t 0 )\n\n\n\n\n - Phương trình pháp diện tại M:\n\n\n( P ) : x [′] ( t 0 ) . ( x − x ( t 0 )) + y [′] ( t 0 ) . ( y − y ( t 0 )) + z [′] ( t 0 ) . ( z − z ( t 0 )) = 0. #### **2.3 Độcong của đường cong**\n\n\nCho đường cong _γ_ = _γ_ ( t ) .', 'Khi đó, véc tơ tiếp tuyến đơn vị N [⃗] ( t ) được xác định bởi\n\n\nN ⃗ ( t ) = _[γ]_ [′] [(] [t] [)]\n\n| _γ_ [′] ( t )| [.]\n\n\nVéc tơ này xác định hướng của đường cong như hình vẽdưới đây. Độcong của đường cong tại một điểm P là một đại lượng đo "tốc độ" thay đổi hướng của\nđường cong tại điểm P đó. Một cách cụthể, người ta định nghĩa độcong của đường cong\ntại điểm P là "tốc độ" thay đổi của véc tơ tiếp tuyến đơn vịtheo độdài cung tại điểm P đó. **Định nghĩa 1.2.** Độcong của đường cong _γ_ là\n\n\n\nC =\n\n\nởđó N [⃗] là véc tơ tiếp tuyến đơn vịcủa _γ_ . dN [⃗]\n\n\nds\n\n�����\n\n\n14\n\n\n\n,\n�����', '_2. Các ứng dụng của phép tính vi phân trong hình học không_ _gian_ _15_\n\n\nTa có\n\n\n\ndN [⃗] /dt\n\n\nds/dt\n\n�����\n\n\n\n=\n�����\n\n\n\n. �����\n\n\n\nC =\n\n\n\ndN [⃗]\n\n\nds\n\n�����\n\n\n\nVì độdài của cung _γ_ được tính theo công thức\n\n\n\nb\n\n\n| _γ_ [′] ( t )| dt,\n\n�\n\n\na\n\n\n\ns =\n\n\n\nb\n� �\n\n\na\n\n\n\n( x t [′] [)] [2] [ + (] [y] [′] t [)] [2] [ + (] [z] [′] t [)] [2] [dt] [ =]\n\n\n\nnên\n\n\n\nt\n\n\ns ( t ) = | _γ_ [′] ( u )| du\n\n�\n\n\na\n\n\n\nlà phần độdài của cung nằm giữa _γ_ ( a ) và _γ_ ( t ) . Lấy đạo hàm hai vếphương trình này theo\nt ta được\nds\ndt [=][ |] _[γ]_ [′] [(] [t] [)][|] [.]\n\n\nDo đó,\n\nC = [|] [N] [⃗] [′] [(] [t] [)][|]\n\n| _γ_ [′] ( t )| [.]\n\n\n**Định lý 1.2.** Độcong của đường cong _γ_ được cho bởi công thức\n\n\n\n~~�~~\nz [′] x [′]\n���z [′′] x [′′]\n�\n\n\n\n~~�~~\nx [′]\ny [′]\n���x [′′]\n� y [′′]\n\n\n\n2\n\n+\n\n\n\n~~�~~\n���\n�\n\n\n\n2\n\n+\n\n\n\n~~�~~\n���\n�\n\n\n\n2\n\n\n\nC ( t ) = [|] _[γ]_ [′] [(] [t] [)][ ∧] _[γ]_ [′′] [(] [t] [)][|] =\n\n| _γ_ [′] ( t )| [3]\n\n\n\n�\n�\n�\n�\n\n\n\n~~�~~\nz [′]\ny [′]\n��� z [′′]\n�y [′′]\n\n\n\n~~�~~\nz [′]\ny [′]\n��� z [′′]\n�y [′′]\n\n\n\n~~�~~\n���\n�\n\n\n\n3 . ( x [′] [2] + y [′] [2] + z [′] [2] ) 2\n\n\n\n_Lời giải_ .', 'Ta có\nN ⃗ ( t ) = _[γ]_ [′] [(] [t] [)]\n\n| _γ_ ( t )|\n\n\nnên\nN [′] ( t ) =\n\n#### 2.4 Mặt cong trong không gian R [3]\n\n\nTương tựnhư cách chúng ta biểu diễn đường cong trong không gian bởi một hàm véc tơ\nmột tham số r ( t ) = x ( t ) . [⃗] i + y ( t ) . [⃗] j + z ( t ) . [⃗] k, mỗi mặt cong trong không gian được biểu diễn\ntham sốdưới dạng\nr ( u, v ) = x ( u, v ) . [⃗] i + y ( t ) . [⃗] j + z ( t ) . [⃗] k,\n\n\ntức là một hàm véc tơ phụthuộc vào hai tham số u, v. 15', '_16_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\n**Định nghĩa 1.3.** Tập hợp tất cảcác điểm ( x ( u, v ), y ( u, v ), z ( u, v )) ∈ **R** [3] sao cho ( u, v ) biến\nthiên trong miền D ⊂ **R** [2] được gọi là một mặt cong cho bởi phương trình tham số. **Ví dụ2.2.** Mỗi mặt phẳng ax + by + cz + d = 0 trong không gian có một tham sốtựnhiên\n\n\uf8f1\n\uf8f4\uf8f4x = u,\n\uf8f4\n\ny = v, D = **R** [2] . \uf8f2\n\n\n\nx = u,\n\n\n\ny = v,\n\n\n\nD = **R** [2] . \uf8f4\n\uf8f4\n\uf8f4\n\uf8f3\n\n\n\nz = − [d] [+] [ax] c [+] [b][y],\n\n\n\nz = − [d] [+] [ax] [+] [b][y]\n\n\n\n**Ví dụ2.3.** Mỗi mặt cầu x [2] + y [2] + z [2] = R [2] trong không gian đều có một tham sốtựnhiên\n\nlà\n\uf8f1\n\uf8f4\uf8f4x = u,\n\uf8f4\n\ny = v, D = {( x, y ) ∈ **R** [2] : x [2] + y [2] ≤ R [2] } . \uf8f2\n\n\n\nx = u,\n\n\n\ny = v,\n\n\n\nD = {( x, y ) ∈ **R** [2] : x [2] + y [2] ≤ R [2] } . \uf8f4\n\uf8f4\n\uf8f4\n\uf8f3\n\n\n\nz = ± �R [2] − x [2] − y [2],\n\n\n\nvà một tham sốtrong tọa độcầu\n\n\uf8f1\n\uf8f4\uf8f4\uf8f4x = R sin _θ_ cos _ϕ_,\n\n\ny = R sin _θ_ sin _ϕ_,\n\n\uf8f2\n\n\n\nx = R sin _θ_ cos _ϕ_,\n\n\ny = R sin _θ_ sin _ϕ_,\n\n\n\nD = {( _ϕ_, _θ_ ) ∈ **R** [2] : 0 ≤ _ϕ_ ≤ 2 _π_, 0 ≤ _θ_ ≤ _π_ . }\n\n\n\n\uf8f4\n\uf8f4\n\uf8f4\n\uf8f3\n\n\n\nz = R cos _θ_,\n\n\n\nNhư vậy, phương trình tham sốcủa một mặt cong có thểkhông duy nhất.', '**Phương trình tiếp diện của mặt cong cho bởi phương trình tham số**\n\n\nBài toán: Tìm mặt phẳng tiếp diện của mặt cong S cho bởi phương trình tham số\n\n\nr ( u, v ) = x ( u, v ) . [⃗] i + y ( t ) . [⃗] j + z ( t ) . [⃗] k\n\n\ntại điểm P 0 ứng với u = u 0, v = v 0 . 16', '_2. Các ứng dụng của phép tính vi phân trong hình học không_ _gian_ _17_\n\n\n[Lời giải] Nếu ta cốđịnh u = u 0 thì r ( u 0, v ) xác định một đường cong C 1 ⊂ S trong\nkhông gian. Tiếp tuyến với đường cong này tại P 0 có véc tơ chỉphương là\n\n\n\nr v = _[∂]_ [x]\n\n\n\n\n_[∂]_ [y] _[∂]_ [z]\n\n_∂_ v [(] [u] [0] [,][ v] [0] [)] [.] [⃗] [j] [ +] _∂_ v\n\n\n\n\n_[∂]_ [x] _[∂]_ [y]\n\n_∂_ v [(] [u] [0] [,][ v] [0] [)] [.] [⃗] [i] [ +] _∂_ v\n\n\n\n_∂_ v [(] [u] [0] [,][ v] [0] [)] [.] [⃗] [k][.]\n\n\n\nTương tựnhư vậy, nếu ta cốđịnh v = v 0 thì r ( u, v 0 ) xác định một đường cong C 2 ⊂ S trong\nkhông gian. Tiếp tuyến với đường cong này tại P 0 có véc tơ chỉphương là\n\n\n\n\n_[∂]_ [x] _[∂]_ [y]\n\n_∂_ u [(] [u] [0] [,][ v] [0] [)] [.] [⃗] [i] [ +] _∂_ u\n\n\n\n_∂_ u [(] [u] [0] [,][ v] [0] [)] [.] [⃗] [k][.]\n\n\n\nr u = _[∂]_ [x]\n\n\n\n\n_[∂]_ [y] _[∂]_ [z]\n\n_∂_ u [(] [u] [0] [,][ v] [0] [)] [.] [⃗] [j] [ +] _∂_ u\n\n\n\nLấy tích có hướng của r u và r v ta được véc tơ pháp tuyến của mặt phẳng tiếp diện của mặt\ncong S tại điểm P 0 . Nếu tại P 0, r u ∧ r v ̸= 0 thì ta nói mặt cong S là trơn tại P 0 . **Chú ý 1.1.** Đường thẳng đi qua P 0 và vuông góc với tiếp diện của S tại P 0 được gọi là pháp\ntuyến của mặt S tại P 0 .', 'Nó nhận véc tơ N [⃗] = r u ∧ r v làm véc tơ chỉphương. **Ví dụ2.4.** Viết phương trình tiếp diện của mặt cong cho bởi phương trình tham số x =\nu [2], y = v [2], z = u + 2v tại điểm ( 1, 1, 3 ) . [Lời giải] Ta có\n\n\n\nr u = _[∂]_ [x]\n\n\n\n\n_[∂]_ [y] _[∂]_ [z]\n\n_∂_ u [.] [⃗] [j] [ +] _∂_ u\n\n\n\n\n_[∂]_ [x] _[∂]_ [y]\n\n_∂_ u [.] [⃗] [i] [ +] _∂_ u\n\n\n\n_∂_ u [.] [⃗] [k] [ =] [ 2][u][.] [⃗] [i] [ +][⃗] [k][,]\n\n\n\n\n_[∂]_ [x] _[∂]_ [y]\n\n_∂_ v [.] [⃗] [i] [ +] _∂_ v\n\n\n\n_∂_ v [.] [⃗] [k] [ =] [ 2][v][.] [⃗] [j] [ +] [ 2] [⃗] [k][.]\n\n\n\nr v = _[∂]_ [x]\n\n\n\n\n_[∂]_ [y] _[∂]_ [z]\n\n_∂_ v [.] [⃗] [j] [ +] _∂_ v\n\n\n\nDo đó,\n\n\n\n= − 2v. [⃗] i − 4u. [⃗] j + 4uv. [⃗] k. �������\n\n\n\nr u ∧ r v =\n\n\n\n⃗ ⃗ ⃗\ni j k\n\n2u 0 1\n\n0 2v 2\n\n�������\n\n\n\nĐiểm ( 1, 1, 3 ) ứng với giá trị u = v = 1 nên r u ∧ r v = (− 2, − 4, 4 ) . Vậy phương trình tiếp\ndiện là\n− 2 ( x − 1 ) − 4 ( y − 1 ) + 4 ( z − 3 ) = 0 ⇔ x + 2y − 2z + 3 = 0. 17', '_18_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\n**Phương trình tiếp diện của mặt cong cho bởi phương trình** z = z ( x, y )\n\n\nTrường hợp đặc biệt, mặt cong S cho bởi phương trình z = z ( x, y ) thì S có một tham số\n\n\n\nhóa tựnhiên là\n\n\n\n\uf8f1\n\uf8f4\n\uf8f4\n\uf8f4\n\uf8f2\n\n\uf8f4\n\uf8f4\n\uf8f4\n\uf8f3\n\n\n\nx = u,\n\n\ny = v,\n\n\nz = z ( u, v ) . Khi đó, r u = ( 1, 0, z [′] u [)] [,][ r] [v] [= (] [0, 1,][ z] [′] v [)] [ và do đó, véc tơ pháp tuyến của mặt cong][ S][ tại][ P][ là]\n\n\n\n= (− z [′] u [,] [ −] [z] v [′] [, 1] [) = (][−] [z] [′] x [,] [ −] [z] [′] y [, 1] [)] [.]\n�������\n\n\n\nr u ∧ r v =\n\n\n\n⃗ ⃗ ⃗\ni j k\n1 0 z [′] u\n\n�������0 1 z [′] v\n\n\n\nDo đó, phương trình tiếp diện tại P ( x 0, y 0, z 0 ) là\n\n\nz − z 0 = z [′] x [(] [M] [)] [ .] [ (] [x] [ −] [x] [0] [) +] [ z] [′] y [(] [M] [)] [ .] [ (] [y] [ −] [y] [0] [)] [ .] (1.3)\n\n\n**Phương trình tiếp diện của mặt cong cho bởi phương trình** f ( x, y, z ) = 0\n\n\nNếu mặt cong S xác định bởi phương trình f ( x, y, z ) = 0 và M ( x 0, y 0, z 0 ) là một điểm\nchính quy của S thì nó xác định một hàm ẩn z = z ( x, y ) và các đạo hàm z [′] x [,][ z] [′] y [được tính]\ntheo công thức\n\n\nx f y [′]\nz [′] x [=][ −] [f] [ ′][′], z [′] y [=][ −] [′] .', 'f z f z\n\n\nÁp dụng công thức (1.3) ta được\n\n\n - Phương trình tiếp diện tại M\n\n\nx [(] [M] [)] f y [′] [(] [M] [)]\nz − z 0 = − [f] [ ′]\nf z [′] ( M ) [(] [x] [ −] [x] [0] [)][ −] f z [′] ( M ) [(] [y] [ −] [y] [0] [)]\n\n⇔ f x [′] [(] [M] [)] [ .] [ (] [x] [ −] [x] [0] [) +] [ f] [ ′] y [(] [M] [)] [ .] [ (] [y] [ −] [y] [0] [) +] [ f] [ ′] z [(] [M] [)] [ .] [ (] [z] [ −] [z] [0] [) =] [ 0.]\n\n\n - Phương trình pháp tuyến tại M\n\n\n\n( d ) : [x] [ −] [x] [0]\n\n\n\n\n[y] [ −] [y] [0] [z] [ −] [z] [0]\n\nf y [′] ( M ) [=] f z [′] ( M\n\n\n\n\n[x] [ −] [x] [0] [y] [ −] [y] [0]\n\nf x [′] ( M ) [=] f [′] ( M\n\n\n\nf z [′] ( M ) [.]\n\n\n#### **2.5 Đường cong cho dưới dạng giao của hai mặt cong**\n\n\n\n.. g ( x, y, z ) = 0\n\n\n\nCho đường cong xác định bởi giao của hai mặt cong như sau\n\n\n\n\uf8f1\n\uf8f2\n\n\n\n\uf8f2 f ( x, y, z ) = 0\n\n\uf8f3g ( x, y, z ) = 0\n\n\n\nĐặt [−→] n f = � f x [′] [(] [M] [)] [,][ f] [ ′] y [(] [M] [)] [,][ f] [ ′] z [(] [M] [)] � là véctơ pháp tuyến của mặt phẳng tiếp diện của mặt\n\n\n18', '_2. Các ứng dụng của phép tính vi phân trong hình học không_ _gian_ _19_\n\n\n\ncong f ( x, y, z ) = 0 tại M. Đặt [−→] n g = �g [′] x [(] [M] [)] [,][ g] y [′] [(] [M] [)] [,][ g] z [′] [(] [M] [)] � là véctơ pháp tuyến của mặt phẳng tiếp diện của mặt\ncong g ( x, y, z ) = 0 tại M. Khi đó [−→] n f ∧ [−→] n g là véctơ chỉphương của tiếp tuyến của đường cong đã cho tại M.', 'Vậy phương\ntrình tiếp tuyến là:\n\n\uf8f1\uf8f4\uf8f4 f x [′] [(] [M] [)] [ .] [ (] [x] [ −] [x] [0] [) +] [ f] [ ′] y [(] [M] [)] [ .] [ (] [y] [ −] [y] [0] [) +] [ f] [ ′] z [(] [M] [)] [ .] [ (] [z] [ −] [z] [0] [) =] [ 0.]\n\uf8f4 PTTQ :\n\uf8f4\n\uf8f4\n\n� g [′] x [(] [M] [)] [ .] [ (] [x] [ −] [x] [0] [) +] [ g] y [′] [(] [M] [)] [ .] [ (] [y] [ −] [y] [0] [) +] [ g] z [′] [(] [M] [)] [ .] [ (] [z] [ −] [z] [0] [) =] [ 0.]\nPTCT : x − x 0 = y − y 0 = z − z 0\n\n\uf8f2\n\n\n\nPTTQ :\n\n\n\n~~�~~\n�����\n\n\n\n= z − z 0\n~~�~~ f x [′] [(] [M] [)] f y [′] [(] [M] [)]\n����� g [′] x [(] [M] [)] g y [′] [(] [M] [)]\n\n\n\n~~�~~\n�����\n\n\n\n= y − y 0\n~~�~~ f z [′] [(] [M] [)] f x [′] [(] [M] [)]\n����� g z [′] [(] [M] [)] g [′] x [(] [M] [)]\n\n\n\n\uf8f4\n\uf8f4\n\uf8f4\n\uf8f4\n\uf8f4\n\uf8f3\n\n\n\nPTTQ : f x [′] [(] [M] [)] [ .] [ (] [x] [ −] [x] [0] [) +] [ f] [ ′] y [(] [M] [)] [ .] [ (] [y] [ −] [y] [0] [) +] [ f] [ ′] z [(] [M] [)] [ .] [ (] [z] [ −] [z] [0] [) =] [ 0.]\n\n� g [′] x [(] [M] [)] [ .] [ (] [x] [ −] [x] [0] [) +] [ g] y [′] [(] [M] [)] [ .] [ (] [y] [ −] [y] [0] [) +] [ g] z [′] [(] [M] [)] [ .] [ (] [z] [ −] [z] [0] [) =] [ 0.]\nPTCT : x − x 0 = y − y 0 = z − z 0\n~~�~~ f y [′] [(] [M] [)] f z [′] [(] [M] [)] ~~�~~ ~~�~~ f z [′] [(] [M] [)] f x [′] [(] [M] [)] ~~�~~ ~~�~', '~ f x [′] [(] [M] [)] f y [′] [(] [M] [)]\n����� g y [′] [(] [M] [)] g z [′] [(] [M] [)] ����� ����� g z [′] [(] [M] [)] g [′] x [(] [M] [)] ����� ����� g [′] x [(] [M] [)] g y [′] [(] [M] [)]\n\n\n\n~~�~~\n�����\n\n\n\n**Bài tập 1.4.** Giảsử [−→] p ( t ), [−→] q ( t ), [−→] _��_ ( t ) là các hàm véctơ khảvi.', 'Chứng minh rằng:\n\n\n\n−→\na. d −→ t −→ t = d p ( t )\ndt � p ( ) + q ( ) � dt\n\n\n\ndt\n\n\n\n( t ) + [d] [−→] [q] [(] [t] [)]\n\ndt dt\n\n\n\n−→\nb. dtd � _α_ ( t ) [−→] p ( t ) � = _α_ ( t ) d pdt ( t ) + _α_ [′] ( t ) [−→] p ( t )\n\n\n\n−→\nc. d −→ t −→ t = −→ t d q ( t )\ndt � p ( ) q ( ) � p ( ) dt\n\n\n\n\n[(] [t] [)] −→\n\ndt q ( t )\n\n\n\n( t ) + [d] [−→] [p] [(] [t] [)]\n\ndt dt\n\n\n\n−→\nd. dtd � −→ p ( t ) ∧−→ q ( t ) � = −→ p ( t ) ∧ d qdt ( t )\n\n\n\n\n[(] [t] [)]\n\ndt ∧ [−→] q ( t )\n\n\n\n( t ) + [d] [−→] [p] [(] [t] [)]\n\ndt dt\n\n\n\n_Lời giải_ . a.', 'Giảsử [−→] p ( t ) = ( p 1 ( t ), p 2 ( t ), p 3 ( t )), [−→] q ( t ) = ( q 1 ( t ), q 2 ( t ), q 3 ( t )), khi đó:\n\n\nd −→ d\ndt � p ( t ) + −→ q ( t ) � = dt [(] [p] [1] [ (] [t] [) +] [ q] [1] [ (] [t] [)] [,][ p] [2] [ (] [t] [) +] [ q] [2] [ (] [t] [)] [,][ p] [3] [ (] [t] [) +] [ q] [3] [ (] [t] [))]\n\n\n=\n�p 1 [′] [(] [t] [) +] [ q] 1 [′] [(] [t] [)] [,][ p] 2 [′] [(] [t] [) +] [ q] 2 [′] [(] [t] [)] [,][ p] 3 [′] [(] [t] [) +] [ q] 3 [′] [(] [t] [)] �\n\n= �p 1 [′] [(] [t] [)] [,][ p] 2 [′] [(] [t] [)] [,][ p] 3 [′] [(] [t] [)] � + �q 1 [′] [(] [t] [)] [,][ q] 2 [′] [(] [t] [)] [,][ q] 3 [′] [(] [t] [)] �\n\n\n\n\n[p]\n\n[(] [t] [)] + [d] [−→] [q] [(] [t] [)]\n\ndt dt\n\n\n\n\n[(] [t] [)]\n= [d] [−→] [p]\n\n\n\ndt\n\n\n\nb.', 'd\n_α_ t [−→] t\n� ( ) p ( ) �\ndt\n\n\n′ ′ ′\n= � [ _α_ ( t ) p 1 ( t )], [ _α_ ( t ) p 2 ( t )], [ _α_ ( t ) p 3 ( t )] �\n\n= � _α_ [′] ( t ) p 1 ( t ) + _α_ ( t ) p 1 [′] [(] [t] [)] [,] _[ α]_ [′] [ (] [t] [)] [ p] [2] [(] [t] [) +] _[ α]_ [ (] [t] [)] [ p] 2 [′] [(] [t] [)] [,] _[ α]_ [′] [ (] [t] [)] [ p] [3] [(] [t] [) +] _[ α]_ [ (] [t] [)] [ p] 3 [′] [(] [t] [)] �\n\n= � _α_ [′] ( t ) p 1 ( t ), _α_ [′] ( t ) p 2 ( t ), _α_ [′] ( t ) p 3 ( t ) � + � _α_ ( t ) p 1 [′] [(] [t] [)] [,] _[ α]_ [ (] [t] [)] [ p] 2 [′] [(] [t] [)] [,] _[ α]_ [ (] [t] [)] [ p] 3 [′] [(] [t] [)] �\n\n\n[(] [t] [)]\n= _α_ ( t ) [d] [−→] [p] + _α_ [′] ( t ) [−→] p ( t )\n\ndt\n\n\nc. Chứng minh tương tựnhư câu b, sửdụng công thức đạo hàm của hàm hợp. 19', '_20_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\nd. d −→\n� p ( t ) ∧−→ q ( t ) �\ndt\n\n\n\n,\n�����\n\n\n\np 3 ( t ) p 1 ( t )\n����� q 3 ( t ) q 1 ( t )\n\n\n\n,\n�����\n\n\n\np 1 ( t ) p 2 ( t )\n����� q 1 ( t ) q 2 ( t )\n\n\n\n�����\n\n\n\n= [d]\n\ndt\n\n\n= ... p 2 ( t ) p 3 ( t )\n������ q 2 ( t ) q 3 ( t )\n\n\n\n�\n\n\n\np 3 ( t ) p 1 [′] [(] [t] [)]\n\n�����, ����� q 3 ( t ) q 1 [′] [(] [t] [)]\n\n\np 3 [′] [(] [t] [)] p 1 ( t )\n\n�����, ����� q 3 [′] [(] [t] [)] q 1 ( t )\n\n\n\np 1 ( t ) p 2 [′] [(] [t] [)]\n\n�����, ����� q 1 ( t ) q 2 [′] [(] [t] [)]\n\n\np 1 [′] [(] [t] [)] p 2 ( t )\n\n�����, ����� q 1 [′] [(] [t] [)] q 2 ( t )\n\n\n\n������\n\n������\n\n\n\n=\n\n\n+\n\n\n\np 2 ( t ) p 3 [′] [(] [t] [)]\n������ q 2 ( t ) q 3 [′] [(] [t] [)]\n\n\np 2 [′] [(] [t] [)] p 3 ( t )\n������ q 2 [′] [(] [t] [)] q 3 ( t )\n\n\n\n\n[(] [t] [)] + [d] [−→] [p] [(] [t] [)]\n\ndt dt\n\n\n\n\n[(] [t] [)]\n= [−→] p ( t ) ∧ [d] [−→] [q]\n\n\n\n∧ [−→] q ( t )\ndt\n\n\n\n**Bài tập 1.5.** Viết phương trình tiếp tuyến và pháp diện của đường:\n\n\n\na. b.', '\uf8f1\n\uf8f4\n\uf8f2\n\n\uf8f4\n\uf8f3\n\n\n\uf8f1\n\uf8f4\n\uf8f4\n\uf8f2\n\n\uf8f4\n\uf8f4\n\uf8f3\n\n\n\nx = a sin [2] t\ny = b sin t cos t tại điểm ứng với t = _[π]_ 4 [,] [ (] [a][,][ b][,][ c] [ >] [ 0] [)] [.]\nz = c cos [2] t\n\n\n\nx = [e] [t] [ sin][ t]\n~~√~~ 2\n\ny = 1\nz = [e] [t] [ cos][ t]\n~~√~~ 2\n\n\n\ntại điểm ứng với t = 0. [a]\n\n2 = [y] [−] 2 [b]\na 0\n\n\n\n2\n\n− c\n\n\n\n_Lời giải_ . a. **–** Phương trình tiếp tuyến: ( d ) : [x] [−] 2 [a]\n\n\n\n0 2 = [z] − [−] c 2 [c]\n\n\n\n**–** Phương trình pháp diện: ( P ) : a �x − 2 [a]\n\n\n\n\n[c] = 0. 2 �\n\n\n\n\n[a] − c z − [c]\n\n2 � � 2\n\n\n\nx = [y] [−] [1]\n\n2 0\n2\n\n\n\n2\n2\n~~√~~ 2\n\n\n\n2 . 2\n\n\n\nb. **–** Phương trình tiếp tuyến: ( d ) : ~~√~~ x\n\n\n\n√\n\n[−] [1] = [z] [−] 2\n\n0 ~~√~~ 2\n\n\n\n**–** Phương trình pháp diện: ( P ) : √\n\n\n\n2 √\nz −\n2 2\n�\n\n\n\n2 √\n2 [x] [ +] 2\n\n\n\n2\n= 0. 2\n�\n\n\n\n**Bài tập 1.6.** Viết phương trình pháp tuyến và tiếp diện của mặt cong:\n\n\na) x [2] − 4y [2] + 2z [2] = 6 tại điểm ( 2, 2, 3 ) . b) z = 2x [2] + 4y [2] tại điểm ( 2, 1, 12 ) . c) z = ln ( 2x + y ) tại điểm (− 1, 3, 0 )\n\n\n20', '_2. Các ứng dụng của phép tính vi phân trong hình học không_ _gian_ _21_\n\n\n\n\n[−] 4 [2] = [y] − [−] 16 [2]\n\n\n\n12\n\n\n\n_Lời giải_ . a. **–** Phương trình pháp tuyến: ( d ) : [x] [−] 4 [2]\n\n\n\n\n[y] − [−] 16 [=] [z] 12 [−] [3]\n\n\n\n**–** Phương trình tiếp diện: ( P ) : 4 ( x − 2 ) − 16 ( y − 2 ) + 12 ( z − 3 ) = 0\n\n\n\n\n[−] [2] = [y] [−] [1]\n\n8 8\n\n\n\nb. **–** Phương trình pháp tuyến: ( d ) : [x] [−] 8 [2]\n\n\n\n\n[−] 8 = [z] [−] − [12] 1\n\n\n\n− 1\n\n\n\n**–** Phương trình tiếp diện: ( P ) : 8 ( x − 2 ) + 8 ( y − 1 ) − ( z − 12 ) = 0. [+] [1] = [y] [−] [3]\n\n2 1\n\n\n\nc. **–** Phương trình pháp tuyến: ( d ) : [x] [+] 2 [1]\n\n\n\n\n[−] = z\n\n1 − 1\n\n\n\n**–** Phương trình tiếp diện: ( P ) : 2 ( x + 1 ) + ( y − 3 ) − z = 0. **Bài tập 1.7.** Viêt phương trình tiếp tuyến và pháp diện của đường:\n\n\n\na. b. x [2] + y [2] = 10\ntại điểm A ( 1, 3, 4 )\n� y [2] + z [2] = 25\n\n\n2x [2] + 3y [2] + z [2] = 47 tại điểm B (− 2, 6, 1 )\n� x [2] + 2y [2] = z\n\n\n\nn f = ( 2, 6, 0 )\n� n g = ( 0, 6, 8 ) [.]\n\n\n\n_Lời giải_ . a. Ta có\n\n\n\nf ( x, y, z ) : = x [2] + y [2] − 10 = 0\nnên\n� g ( x, y, z ) : = y [2] + z [2] − 25 = 0\n\n\n\nDo đó n f ∧ n g = 4 ( 12, − 4, 3 ) .', 'Vậy:\n\n\n\n12 [−] [1] [=] [y] − [−] 4 [3]\n\n\n\n3\n\n\n\n**–** Phương trình tiếp tuyến ( d ) : [x] 12 [−] [1]\n\n\n\n− [−] 4 [=] [z] [−] 3 [4]\n\n\n\n**–** Phương trình pháp diện ( P ) : 12 ( x − 1 ) − 4 ( y − 3 ) + 3 ( z − 4 ) = 0\n\n\n\nb. Tương tự,\n\n\n\nn f = (− 8, 6, 12 )\n� n g = (− 4, 4, − 1 ) [,][ n] [ f] [ ∧] [n] [g] [ =][ −] [2] [ (] [27, 27, 4] [)] [ nên]\n\n\n\n\n[+] [2] [y] [−] [1]\n\n27 [=] 27\n\n\n\n4\n\n\n\n**–** Phương trình tiếp tuyến ( d ) : [x] 27 [+] [2]\n\n\n\n\n[−] [z] [−] [6]\n\n27 [=] 4\n\n\n\n**–** Phương trình pháp diện ( P ) : 27 ( x + 2 ) + 27 ( y − 1 ) + 4 ( z − 6 ) = 0\n\n\n21', '_22_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\n22', '# **CHƯƠNG 2**\n\n## **T ÍCH PHÂN BỘI**\n\n#### § 1. T ÍCH PHÂN KÉP **1.1 Định nghĩa**\n\n**Diện tích và tích phân xác định**\n\n\nCho f ( x ) là một hàm sốxác định với a ≤ x ≤ b. Đầu tiên ta chia khoảng [ a, b ] này thành\nn khoảng nhỏ [ x i − 1, x i ] với độdài bằng nhau ∆x = [b] [−] n [a] và chọn trong mỗi khoảng đó một\n\nđiểm x i [∗] [bất kì. Sau đó lập tổng Riemann]\n\n\nn\n#### S ( n ) = ∑ f ( x i [∗] [)] [∆][x]\n\ni = 1\n\n\n23', '_24_ _Chương 2. Tích phân bội_\n\n\nvà lấy giới hạn đểthu được tích phân xác định từ a đến b của hàm số f ( x ) :\n\n\nb\n\n\nf ( x ) dx = lim\n\n� n → ∞ [S] [(] [n] [)] [.]\n\n\na\n\n\nTrường hợp đặc biệt, f ( x ) ≥ 0, tổng Riemann trên chính là tổng diện tích của các hình\n\n\n\nchữnhật xấp xỉmiền D giới hạn bởi các đường x = a, x = b, y = 0 và y = f ( x ) và\n\n\nchính là diện tích của miền D. **Thểtích và tích phân bội hai trên hình chữnhật**\n\n\n\nb\n\n\nf ( x ) dx\n\n�\n\n\na\n\n\n\nMột cách hoàn toàn tương tựnhư trên, xét hàm số f phụthuộc vào hai biến số x, y xác\nđịnh trên một hình chữnhật đóng\n\n\nR = [ a, b ] × [ c, d ] = {( x, y ) ∈ **R** [2] : a ≤ x ≤ b, c ≤ y ≤ d } . Gọi S là miền nằm phía dưới của mặt z = f ( x, y ) và phía trên của hình chữnhật R, nghĩa\n\nlà\nS = {( x, y, z ) ∈ **R** [3] : 0 ≤ z ≤ f ( x, y ), ( x, y ) ∈ R } . Đầu tiên ta chia miền R thành các miền hình chữnhật con, bằng cách chia khoảng [ a, b ]\nthành m khoảng con với độdài bằng nhau và bằng [b] [−] [a] [, chia khoảng] [ [] [c][,][ d] []] [ thành][ n][ khoảng]\n\n\n\n\n[−] [a]\nthành m khoảng con với độdài bằng nhau và bằng m [, chia khoảng] [ [] [c][,][ d] []] [ thành][ n][ khoảng]\n\ncon với độdài bằng nhau và bằng [d] [−] [c] [.', 'Như vậy ta đã chia miền][ R][ thành][ m] [ ×] [ n][ hình chữ]\n\n\n\ncon với độdài bằng nhau và bằng [d] [−] n [c] [. Như vậy ta đã chia miền][ R][ thành][ m] [ ×] [ n][ hình chữ]\n\nnhật con\nR ij = [ x i − 1, x i ] × [ y j − 1, y j ]\n\n\n\n24', '_1. Tích phân kép_ _25_\n\n\nmỗi hình chữnhật con có diện tích ∆S = ∆x∆y. Trên mỗi hình chữnhật R ij ta chọn một\nđiểm ( x [∗]\nij [,][ y] ij [∗] [)] [ bất kì. Khi đó thểtích của phần con của][ S][ nằm phía trên của hình chữnhật]\n\nR ij có thểđược xấp xỉbằng\nf ( x ij [∗] [,][ y] ij [∗] [)] [∆][S][.]\n\nChúng ta tiếp tục quá trình này và thu được công thức xấp xỉthểtích của miền S:\n\n\n\nm\n#### V ( S ) ≈ ∑\n\ni = 1\n\n\n\nn\n#### ∑ f ( x ij [∗] [,][ y] ij [∗] [)] [∆][S][.]\n\nj = 1\n\n\n\nDễdàng nhận thấy rằng nếu ta chia miền R càng nhỏthì công thức xấp xỉtrên càng tốt. **Định nghĩa 2.4.** Tích phân kép (hay tích phân bội hai) của hàm số f ( x ) trên miền hình\nchữnhật R là\n\nm n\n#### �� f ( x, y ) dxdy = m, lim n → ∞ ∑ ∑ f ( x ij [∗] [,][ y] ij [∗] [)] [∆][S][,]\n\n\n\nn\n#### ∑ f ( x ij [∗] [,][ y] ij [∗] [)] [∆][S][,]\n\nj = 1\n\n\n\nf ( x, y ) dxdy = lim\nm,n → ∞\nR\n\n\n\nm\n#### ∑\n\ni = 1\n\n\n\nnếu như giới hạn này tồn tại. **Chú ý 2.2.** Nếu f ( x, y ) ≥ 0 thì thểtích của miền nằm phía dưới mặt cong z = f ( x, y ) và\nphía trên hình chữnhật R = [ a, b ] × [ c, d ] là\n\n\nV = f ( x, y ) dxdy. ��\n\nR\n\n\n**Tích phân lặp và Định lý Fubini**\n\n\nGiảsử f ( x, y ) là một hàm sốkhảtích trên R = [ a, b ] × [ c, d ] .', 'Xét hai tích phân lặp sau:\n\n\n\n\uf8ee\n\n\uf8f0\n\n\n\nd\n\n\nf ( x, y ) dy\n\n�\n\n\nc\n\n\n\n\uf8f9\n\n\uf8fb dx, I 2 =\n\n\n25\n\n\n\nd\n�\n\n\nc\n\n\n\n\uf8ee\n\n\uf8f0\n\n\n\nb\n\n\nf ( x, y ) dx\n\n�\n\n\na\n\n\n\n\uf8f9\n\n\n. dy\n\uf8fb\n\n\n\nI 1 =\n\n\n\nb\n�\n\n\na', '_26_ _Chương 2. Tích phân bội_\n\n\n**Định lý 2.3 (Định lý Fubini).** Nếu f ( x, y ) là hàm sốliên tục trên miền hình chữnhật\nR = [ a, b ] × [ c, d ] thì\n\n\n\nb\n\n\nf ( x, y ) dx.\n\n�\n\n\na\n\n\n\nd\n\n\ndy\n\n�\n\n\nc\n\n\n\nd\n\n\nf ( x, y ) dy =\n\n�\n\n\nc\n\n\n\nf ( x, y ) dxdy =\n\n��\n\nR\n\n\n\nb\n\n\ndx\n\n�\n\n\na\n\n\n\n_Chứng minh._ Trong khuôn khổcủa Bài giảng này, thay vì đưa ra chứng minh cho trường\nhợp tổng quát, chúng ta sẽchỉchứng minh cho trường hợp f ( x, y ) ≥ 0. Trước hết, thểtích\ncủa miền nằm phía dưới mặt z = f ( x, y ) và phía trên hình chữnhật R được tính theo công\n\nthức.\n\nV = f ( x, y ) dxdy.\n��\n\nR\n\n\nTrong học phần Giải tích I, phần ứng dụng của tích phân xác định đểtính thểtích, chúng\n\nta có một công thức khác, đó là\n\n\n\nV =\n\n\n\nb\n\n\nA ( x ) dx,\n\n�\n\n\na\n\n\n\nởđó A ( x ) là diện tích của thiết diện của miền V cắt bởi mặt phẳng vuông góc với trục Ox.\n\n\nNhìn vào hình vẽ, có thểthấy A ( x ) diện tích của miền là miền nằm phía dưới đường\nz = f ( x, y ), ởđó x được cốđịnh và c ≤ y ≤ d. Do đó,\n\n\n\nf ( x, y ) dxdy =\n\nR\n\n\n\nd\n\n\nf ( x, y ) dy.\n\n�\n\n\nc\n\n\n\nA ( x ) =\n\n\n\nd\n�\n\n\n\nf ( x, y ) dy ⇒\n\n� ��\n\n\nc\n\n\n\nb\n\n\ndx\n\n�\n\n\na\n\n\n\nMột cách hoàn toàn tương tự,\n\n\nf ( x, y ) dxdy =\n\n��\n\nR\n\n\n\nd\n\n\ndy\n\n�\n\n\nc\n\n\n\nb\n\n\nf ( x, y ) dx.\n\n�\n\n\na\n\n\n\n26', '_1. Tích phân kép_ _27_\n\n\n**Tích phân kép trên miền bịchặn bất kì**\n\n\nNếu như miền D không phải là hình chữnhật mà chỉlà miền bịchặn bất kì thì ý tưởng\nrất đơn giản là chọn một hình chữnhật R chứa D và định nghĩa hàm số F với miền xác\n\nđịnh là R bởi\n\n\n\n0, nếu ( x, y ) ̸∈ D,\n\n\n\nF ( x, y ) =\n\n\n\n\uf8f1\n\uf8f2\n\n\n\n\uf8f2 f ( x, y ), nếu ( x, y ) ∈ D,\n\n\uf8f30, nếu ( x, y ) ̸∈ D,\n\n\n\n**Định nghĩa 2.5.** Tích phân kép (hay tích phân bội hai) của hàm số f ( x, y trên miền D\nđược định nghĩa bằng\n\n\nf ( x, y ) dxdy = F ( x, y ) dxdy. �� ��\n\n\n\nf ( x, y ) dxdy =\n��\nD R\n\n\n\nF ( x, y ) dxdy. R\n\n\n\nCó một cách định nghĩa khác của tích phân kép như sau. **Định nghĩa 2.6.** Cho hàm số f ( x, y ) xác định trong một miền đóng, bịchặn D . Chia\nmiền D một cách tuỳý thành n mảnh nhỏ. Gọi các mảnh đó và diện tích của chúng là\n∆S 1, ∆S 2, ..., ∆S n . Trong mỗi mảnh ∆S i lấy một điểm tuỳý M ( x i, y i ) và thành lập tổng tích\n\n\nn\nphân I n = ∑ f ( x i, y i ) ∆S i . Nếu khi n → ∞ sao cho max { ∆S i → 0 } mà I n tiến tới một giá\ni = 1\n\ntrịhữu hạn I, không phụthuộc vào cách chia miền D và cách chọn điểm M ( x i, y i ) thì giới\nhạn ấy được gọi là tích phân kép của hàm số f ( x, y ) trong miền D, kí hiệu là\n\n\nf ( x, y ) dxdy.', '��\n\nD\n\n\nCách định nghĩa này vềcơ bản ý tưởng cũng giống như định nghĩa ởtrên. Tuy nhiên, việc\nchia miền D thành n mảnh nhỏnhư vậy dẫn đến việc khó hình dung. Thay vào đó, do tích\nphân kép không phụthuộc vào cách chia miền D thành các mảnh nhỏnên ta "chủđộng"\nchia D thành hai họđường thẳng song song với các trục toạđộnhư trong Định nghĩa 2.4. 27', '_28_ _Chương 2. Tích phân bội_\n\n\n**Chú ý 2.3.** Nếu tồn tại tích phân kép f ( x, y ) dxdy thì ta nói hàm số f ( x, y ) khảtích\n��\n\nD\n\ntrong miền D .\n\n\n**Tính chất cơ bản:**\n\n\n Tính chất tuyến tính:\n\n\n\n��\n\n\n\nf ( x, y ) dxdy +\n��\nD D\n\n\n\n\n[ f ( x, y ) + g ( x, y )] dxdy =\n��\nD D\n\n\n\ng ( x, y ) dxdy\n\nD\n\n\n\n��\n\n\n\nk f ( x, y ) dxdy = k\n��\nD D\n\n\n\nf ( x, y ) dxdy\n\nD\n\n\n\n\n- Tính chất cộng tính: Nếu D = D 1 ∪ D 2, ởđó D 1 và D 2 không "chồng" lên nhau (có thể\nngoại trừphần biên) thì\n\n\n\n��\n\n\n\nf ( x, y ) dxdy =\n��\nD D\n\n\n\nf ( x, y ) dxdy.\n\n\n\nD 1\n\n\n\nf ( x, y ) dxdy +\n��\n\nD 2\n\n\n\n\n\n\n\n\n\n\n#### **1.2 Tính tích phân kép trong hệtoạđộDescartes**\n\nĐểtính các tích phân hai lớp, ta cần phải đưa vềtính các tích phân lặp.\n\n\n1. Nếu D là miền hình chữnhật ( D ) : a ⩽ x ⩽ b, c ⩽ y ⩽ d thì ta có thểsửdụng một\ntrong hai tích phân lặp\n\n\n\nd\n\n\ndy\n\n�\n\n\nc\n\n\n\nd\n\n\nf ( x, y ) dx.\n\n�\n\n\nc\n\n\n\nd\n\n\nf ( x, y ) dy =\n\n�\n\n\nc\n\n\n28\n\n\n\nf ( x, y ) dxdy =\n\n��\n\nD\n\n\n\nb\n\n\ndx\n\n�\n\n\na']
|
|
|
|
| 1 |
+
['## **Báo cáo dựán Mini Project** **IoT Security**\n\n**Người thực hiện:** Nguyễn Bình Nam\n\n\n**Người hướng dẫn:** Trương Chí Tài (VTNet), Hoàng Xuân Hưng (VTNet)\n\n\nNgày chỉnh sửa cuối: Ngày 20 tháng 6 năm 2025', '# **Mục lục**\n\n**Tóm tắt dựán** **3**\n\n\n**1** **Tổng quan vềIoT** **4**\n1.1 IoT là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4\n1.2 Các thành phần trong hệthống IoT . . . . . . . . . . . . . . . 4\n\n\n**2** **Các mối đe dọa vềbảo mật trong IoT** **6**\n2.1 Mối đe dọa tầng cảm biến . . . . . . . . . . . . . . . . . . . . 6\n2.1.1 Khai thác thiết bịvật lý . . . . . . . . . . . . . . . . . 6\n2.1.2 Tấn công side-channel . . . . . . . . . . . . . . . . . . 6\n2.1.3 Chỉnh sửa firmware . . . . . . . . . . . . . . . . . . . . 6\n2.1.4 Ví dụthực tế. . . . . . . . . . . . . . . . . . . . . . . 7\n2.2 Mối đe dọa tầng mạng . . . . . . . . . . . . . . . . . . . . . . 7\n2.2.1 Tấn công phát lại . . . . . . . . . . . . . . . . . . . . . 7\n2.2.2 Man-in-the-Middle (MITM) . . . . . . . . . . . . . . . 7\n2.2.3 Làm nhiễu sóng radio . . . . . . . . . . . . . . . . . . . 7\n2.2.4 Denial of Service (DoS) . . . . . . . . . . . . . . . . . . 7\n2.2.5 Ví dụthực tế. . . . . . . . . . . . . . . . . . . . . . . 8\n2.3 Mối đe dọa tầng ứng dụng . . . . . . . . . . . . . . . . . . . . 8\n2.3.1 Xác thực và quản lý session yếu . . . . . . . . . . . . . 8\n2.3.2 Lỗhổng web . . . . . . . . . . . . . . . . . . .', 'ản lý session yếu . . . . . . . . . . . . . 8\n2.3.2 Lỗhổng web . . . . . . . . . . . . . . . . . . . . . . . . 8\n2.3.3 Ứng dụng mobile lưu trữthông tin không an toàn . . . 8\n2.3.4 Ví dụthực tế. . . . . . . . . . . . . . . . . . . . . . . 8\n\n\n**3** **Các phương pháp khai thác IoT** **9**\n3.1 Mật khẩu yếu, dễđoán . . . . . . . . . . . . . . . . . . . . . . 9\n3.2 Dịch vụmạng không an toàn . . . . . . . . . . . . . . . . . . 10\n3.3 Giao diện ecosystem không an toàn . . . . . . . . . . . . . . . 10\n3.4 Không có cơ chếcập nhật an toàn . . . . . . . . . . . . . . . . 10\n3.5 Sửdụng thành phần phiên bản cũ, thiếu an toàn . . . . . . . 10\n3.6 Bảo vệquyền riêng tư không đầy đủ . . . . . . . . . . . . . . 10\n\n\n1', '3.7 Cơ chếtruyền và lưu trữdữliệu không an toàn . . . . . . . . 11\n3.8 Không có quản lý thiết bị . . . . . . . . . . . . . . . . . . . . 11\n3.9 Cấu hình mặc định không an toàn . . . . . . . . . . . . . . . . 11\n3.10 Không có sựkiên cốvềmặt vật lý . . . . . . . . . . . . . . . . 11\n\n\n**4** **Minh họa** **12**\n4.1 Thiết bịđược sửdụng . . . . . . . . . . . . . . . . . . . . . . 12\n4.2 Setup môi trường . . . . . . . . . . . . . . . . . . . . . . . . . 13\n4.3 Phân tích firmware . . . . . . . . . . . . . . . . . . . . . . . . 14\n4.4 Các lỗhổng được khai thác . . . . . . . . . . . . . . . . . . . 18\n4.4.1 Command injection trong tính năng chuẩn đoán ping . 18\n4.4.2 Command injection trong tính năng DDNS check . . . 21\n4.4.3 Kiểm soát truy cập kém . . . . . . . . . . . . . . . . . 23\n4.4.4 Chỉnh sửa firmware . . . . . . . . . . . . . . . . . . . . 27\n\n\n**5** **Kết luận** **32**\n\n\n2', '# **Tóm tắt dựán**\n\nCác thiết bịIoT (Internet of Things) ngày càng trởthành 1 phần tất yếu\ntrong cuộc sống hiện đại. Với sốlượng thiết bịkết nối đa dạng và dữliệu\nđược thu thập liên tục ngày càng gia tăng, các lỗhổng bảo mật có thểdẫn\nđến những rủi ro nghiêm trọng cho người dùng và doanh nghiệp. Việc đảm\nbảo an toàn và bảo mật cho hệsinh thái IoT là yêu cầu cấp thiết, đòi hỏi\nnhững giải pháp toàn diện từcấp độthiết b���đến mạng lưới kết nối.\n\n\nDựán này sẽđi sâu vào việc tìm hiểu vềhạtầng IoT và phân tích\nbảo mật trong hạtầng đó. Đồng thời, các phương pháp khai thác IoT sẽ\nđược khám phá và một sốlỗhổng bảo mật của thiết bịIoT sẽđược minh\nhọa. Mục tiêu của dựán này là hiểu sâu hơn vềbảo mật cho hệthống IoT\nvà đềcao sựquan trọng của việc xây dựng hệthống bảo mật cho hạtầng\nnày.\n\n\n3', '# **Chương 1** **Tổng quan vềIoT**\n\n### **1.1 IoT là gì?**\n\nInternet of Things (IoT) là một hệthống gồm các thiết bịđược gọi là\n"vật"(Ví dụ: Đèn, điều hòa, xe, v.v). Những thiết bịnày có các bộphận\nđiện tửcho phép chúng có khảnăng tựđộng thu thập dữliệu thông qua\ncảm biến, xửlý và trao đổi dữliệu qua mạng. Những thiết bịnày có thểlà\ncác thiết bịgia dụng đơn giản như router, đèn, điều hóa, hay các thiết bị\nphức tạp như máy móc công nghiệp quy mô lớn\n\n\nĐặc trưng nổi bật của IoT là tính liên thông: Mỗi thiết bịIoT sẽ\nluôn luôn được bật, luôn được kết nối và tương tác với các thiết bịIoT khác\ntrong cùng hệthống. Những giao thức kết nối được sửdụng trong hệthống\nIoT cần được tối ưu cho hệthống năng lượng thấp và ít tài nguyên tính\ntoán. Một đặc trưng khác của những thiết bịIoT này là các thiết bịnày có\nkhảnăng thu thập thông tin bằng các cảm biến và xửlý thông tin đó trong\nthời gian thực. Với sựtăng trưởng vượt bậc của hệsinh thái IoT trên thếgiới, được\ndựđoán là sốlượng thiết bịIoT trên thếgiới sẽtăng đến 41.1 tỷthiết bị\nvào năm 2030, việc xây dựng bảo mật cho các thiết bịIoT là một điều cần\nthiết.', 'g đến 41.1 tỷthiết bị\nvào năm 2030, việc xây dựng bảo mật cho các thiết bịIoT là một điều cần\nthiết. [1]\n\n### **1.2** **Các thành phần trong hệthống IoT**\n\n\nMột hệthống IoT sẽbao gồm nhiều thành phần khác nhau, mỗi thành phần\nđều có những tác động riêng đến bảo mật của hệthống. Kiến trúc hệthống\nIoT có thểđược chia thành 3 tầng: Cảm biến, Mạng, và Ứng dụng. [2]\n\n\n4', '**Tầng Cảm biến:**\n\n\n Gồm các vi điều khiển, cảm biến, bộtruyền động và các giao thức qua\ndây. Một sốgiao thức qua dây cho IoT phổbiến: UART, JTAG, I2C, SPI,\n\nv.v. Các thiết bịnày rất hạn chếvềmặt tài nguyên. Tài nguyên tính toán\nthấp và bộnhớhạn chếđồng nghĩa với việc các biện pháp bảo mật dựa\ntrên phần mềm như mật mã phải nhẹvà tối ưu. Những thiết bịnày cần bảo vệphần cứng tốt do các cuộc tấn công vật\nlý có khảnăng xảy ra với các thiết bịnày. **Tầng Mạng:**\n\n\n Hệthống IoT sửdụng nhiều loại giao thức mạng khác nhau cho việc\ngiao tiếp không dây ởcác tầm khoảng cách khác nhau: ngắn, trung và\ndài. Một sốgiao thức mạng IoT phổbiến: Bluetooth Low Energy (BLE),\nWi-Fi, LoRaWAN, Zigbee, NB-IoT, LTE-M, v.v. Những giao thức không dây này cần được bảo vệvà mã hóa một cách\nnghiêm ngặt khỏi các cuộc tấn công mạng. **Tầng Ứng dụng:**\n\n\n Hầu hết thiết bịIoT đều cần một ứng dụng hoặc giao diện đểtương\ntác: web, ứng dụng di động, ứng dụng desktop. Một sốgiao thức ởtầng ứng dụng phổbiến cho IoT: HTTP/HTTPS,\nCoAP, MQTT, v.v. Giống như trong các ứng dụng thông thường, các giao thức này có thể\nbịkẻtấn công lợi dụng cho mục đích xấu, đặc biệt là những giao thức\nthiết kếriêng cho IoT như MQTT.', '\nbịkẻtấn công lợi dụng cho mục đích xấu, đặc biệt là những giao thức\nthiết kếriêng cho IoT như MQTT. Bên cạnh đó, chính ứng dụng cũng\ncó thểtồn tại các lỗhổng tấn công web và app điển hình. 5', '# **Chương 2** **Các mối đe dọa vềbảo mật** **trong IoT**\n\nHệsinh thái IoT đã tạo ra một môi trường đe dọa đa tầng. Các mối đe dọa\nvềmặt bảo mật trong IoT có thểđược được phân loại theo các tầng khác\nnhau trong kiến trúc IoT, đồng thời các phương thức khai thác có thểcó các\nhậu quảkhác nhau.\n\n### **2.1** **Mối đe dọa tầng cảm biến**\n\n#### **2.1.1 Khai thác thiết bịvật lý**\n\n\nNhiều nhà sản xuất thiết bịIoT thường đểlộchân UART/JTAG hoặc bật\nchếđộconsole gỡlỗi ngay trên thiết bịthương mại. Khi có quyền truy cập vật\nlý, kẻtấn công có thểtrích xuất dữliệu từbộnhớflash, trích xuất firmware,\nchiếm quyền shell root hoặc thậm chí cài đặt firmware có chứa mã độc. [3]\n\n#### **2.1.2 Tấn công side-channel**\n\n\nBằng cách theo dõi mức tiêu thụđiện năng hay bức xạđiện từcủa thiết bị\nkhi thực hiện các phép toán mã hóa và giải mã, người tấn công có thểchiết\nxuất khóa bí mật dùng đểmã hóa/giải mã hoặc trộm cắp dữliệu nhạy cảm\nbên trong. [4]\n\n#### **2.1.3 Chỉnh sửa firmware**\n\n\nMột người tấn công có thểlợi dụng việc thiếu cơ chếxác thực chặt chẽtrong\nquá trình cập nhật firmware qua OTA (Over-The-Air). Họcó thểkhiến thiết\n\n\n6', 'bịcài đặt firmware đã chỉnh sửa nếu chức năng OTA không có bảo mật tốt. Ngoài ra, việc can thiệp trực tiếp qua cổng nạp (flashing) cũng cho phép\nhacker ghi đè firmware gốc. #### **2.1.4 Ví dụthực tế**\n\n\nVào năm 2024, một nhà nghiên cứu bảo mật đã minh họa cuộc tấn công vào\nhệthống đăng nhập vào root shell của thiết bịcamera an ninh VStarcam. Bằng cách trích xuất firmware từchip SPI đểlấy được mật khẩu root và\nkết nối với root shell qua UART, họcó thểlấy được root shell và trích xuất\nthêm thông tin vềthiết bịđó cho các cuộc tấn công khác. [5]\n\n### **2.2** **Mối đe dọa tầng mạng**\n\n#### **2.2.1 Tấn công phát lại**\n\n\nỞdạng tấn công này, người tấn công có thểbắt và ghi lại sóng radio phát\nra từthiết bịIoT và phát lại sau đó. Điều này cho phép họthực thi lệnh mà\nkhông cần xác thực, do thiếu cơ chếmã hóa và token phiên làm việc với thời\ngian hết hạn ngắn. [6]\n\n#### **2.2.2 Man-in-the-Middle (MITM)**\n\n\nBằng cách sửdụng spoofing hoặc tạo các điểm truy cập (AP) giả, kẻxấu có\nthểđọc và thậm chí thay đổi các gói tin từgiữa các thiết bị. Hậu quảlà lộ\nlọt thông tin hoặc bịchỉnh sửa nội dung ban đầu.', 'y đổi các gói tin từgiữa các thiết bị. Hậu quảlà lộ\nlọt thông tin hoặc bịchỉnh sửa nội dung ban đầu. #### **2.2.3 Làm nhiễu sóng radio**\n\n\nNgười tấn công có thểphát tín hiệu cùng tần sốvới thiết bị, chặn các gói tin\ndữliệu, khiến cảm biến hoặc thiết bịtruyền động không nhận được gói tin\nvà không phản hồi. [7]\n\n#### **2.2.4 Denial of Service (DoS)**\n\n\nDo hạn chếnặng vềtài nguyên, thiết bịIoT có thểdễdàng bịtấn công DoS. Một cuộc tấn công DoS có thểlàm gián đoạn dịch vụcủa thiết bị. Với các\nthiết bịmạng như gateway hay router, DoS thậm chí có thểlàm đứt kết nối\ntoàn bộhệthống IoT, gây ra gián đoạn quy mô lớn. 7', '#### **2.2.5 Ví dụthực tế**\n\nMirai botnet: Botnet này lợi dụng tính bảo mật kém của các thiết bịIoT. Botnet này lây lan qua nhiều phương thức như mật khẩu mặc định, mã hóa\nyếu, v.v. Mirai botnet đã thực hiện một sốcuộc tấn công DDoS lớn nhất\ntrên thếgiới. Vì mã nguồn đã được công khai, đã xuất hiện nhiều biến thể\nMirai khác nhau. [8]\n\n### **2.3** **Mối đe dọa tầng ứng dụng**\n\n#### **2.3.1 Xác thực và quản lý session yếu**\n\n\nWebsite hoặc ứng dụng di động của hệthống IoT có thểlưu trữmật khẩu\nyếu hoặc quản lý session không đúng cách. Điều này có thểtạo cơ hội cho\nkẻtấn công sửdụng brute-force và hijack session. #### **2.3.2 Lỗhổng web**\n\n\nWebsite của thiết bịcó thểtồn tại các lỗhổng như XSS, CSRF, command\ninjection, broken access control. . . Điều này cho phép kẻtấn công leo thang\nquyền hạn, đào sâu hơn vào hệthống và rò rỉthông tin. #### **2.3.3 Ứng dụng mobile lưu trữthông tin không an toàn**\n\n\nỨng dụng di động của hệthống IoT, nếu có lưu trữAPI key, thông tin đăng\nnhập hay certificate của thiết bịdưới plaintext trên bộnhớmáy hoặc sử\ndụng mã hóa hoặc obfuscation kém, sẽcó khảnăng bịngười tấn công đánh\ncắp các thông tin này khi điện thoại bịroot hoặc mất.', 'cation kém, sẽcó khảnăng bịngười tấn công đánh\ncắp các thông tin này khi điện thoại bịroot hoặc mất. Hacker có thểlợi dụng\nđểtruy cập và tấn công hệthống IoT. #### **2.3.4 Ví dụthực tế**\n\n\nVào 2017, thông tin vềngười dùng của sản phẩm CloudPets (đồchơi kết nối\nvới mạng) đã bịrò rỉ. Sản phẩm này có yêu cầu mật khẩu kém, dễbịbrute\nforce. Thông tin vềngười dùng cũng được lưu lại trong database không được\nbảo vệtốt, cho phép người tấn công truy cập tuy không được cho phép. [9]\n\n\n8', '# **Chương 3** **Các phương pháp khai thác IoT**\n\nSau đây là một sốphương pháp khai thác hệthống IoT. Những phương pháp\nnày được liệt kê trong danh sách OWASP IoT Top 10. [10] [11]\n\n### **3.1** **Mật khẩu yếu, dễđoán**\n\n\nNhiều thiết bịIoT sửdụng mật khẩu yếu, dễbịbrute-force, có thểbịtìm\ntrên mạng. Hơn nữa, một sốthiết bịhardcode mật khẩu một bộphận nào\ncủa thiết bịnhư firmware, dẫn đến khảnăng người tấn công có khảnăng\ntrích xuất mật khẩu từbộphận đó của thiết bị. Hậu quảlà các người tấn\ncông có thểtruy cập vào thiết bịđó mà không được phép.\n\n\n9', '### **3.2 Dịch vụmạng không an toàn**\n\nNhững dịch vụmạng không cần thiết hoặc không an toàn, có tính bảo mật,\nmã hóa kém chạy trên thiết bịlà một điểm yếu trầm trọng, nhất là các dịch\nvụcó kết nối với Internet. Người tấn công có thểtrích xuất thông tin nhạy\ncảm, tấn công các hệthống khác có kết nối với thiết bịđã bịtấn công, hoặc\ntruy cập vào thiết bịmà không được phép. ### **3.3 Giao diện ecosystem không an toàn**\n\n\nCác giao diện web, API, cloud, hoặc di động cho các thiết bịIoT nếu không\nđược bảo vệan toàn (thiếu xác thực, mã hóa, filter đầu vào và ra) có thểsẽ\nmởra hướng tấn công vào thiết bịhoặc các bộphận trong thiết bịđó. ### **3.4** **Không có cơ chếcập nhật an toàn**\n\n\nNếu thiết bịkhông có cơ chếcập nhật an toàn (Xác thực firmware, mã hóa\ntrong lúc chuyển giao firmware, cơ chếchống rollback, thông báo người dùng\nvềcập nhật firmware) thì các thiết bịnày có khảnăng bịtấn công chỉnh sửa\nfirmware và các bộphận hệthống quan trọng. ### **3.5** **Sửdụng thành phần phiên bản cũ, thiếu** **an toàn**\n\n\nViệc sửdụng các bộphận phần mềm và thư viện cũ, thiếu an toàn sẽcho\nphép người tấn công khai thác các lỗhổng đã có trong các phiên bản cũ và\nthiếu an toàn đó.', 'oàn sẽcho\nphép người tấn công khai thác các lỗhổng đã có trong các phiên bản cũ và\nthiếu an toàn đó. Thêm nữa, thiết bịIoT cũng có thểsửdụng phần cứng từ\nmột supply chain đã bịtấn công. ### **3.6** **Bảo vệquyền riêng tư không đầy đủ**\n\n\nMột sốthiết bịthu thập thông tin cá nhân của người dùng trong thiết bị\nhoặc hệsinh thái và được sửdụng một cách không an toàn (lưu hoặc chuyển\ngiao mà không mã hóa) và không được người dùng cho phép. Những thiết bị\nnày cần bảo vệquyền riêng tư theo tiêu chuẩn quốc tế. 10', '### **3.7 Cơ chếtruyền và lưu trữdữliệu không** **an toàn**\n\nThiếu mã hóa và access control cho các dữliệu nhạy cảm trong hệsinh thái\nIoT (bao gồm dữliệu at rest, in transit, và during processing), dẫn đến người\ntấn công có thểthu thập các dữliệu nhạy cảm này. ### **3.8** **Không có quản lý thiết bị**\n\n\nKhông quản lý tốt vềmọi mặt của thiết bị(quản lý update, giám sát thiết\nbị, loại bỏthiết bịmột cách an toàn), các thiết bịIoT có thểdẫn đến cảhệ\nthống mạng bịtấn công. Việc quản lý thiết bịcần được bảo mật tốt, nếu\nkhông thì có thểdẫn đến truy cập trái phép, chỉnh sửa cấu hình và firmware,\nhoặc điều khiển thiết bị. ### **3.9** **Cấu hình mặc định không an toàn**\n\n\nCác thiết bịhoặc hệthống IoT không có cấu hình mặc định an toàn hoặc\nkhông có cơ chếchỉnh sửa cấu hình của thiết bịsẽdẫn đến rủi ro vềmặt\nbảo mật cao, cho phép người tấn công truy cập trái phép vào thiết bịbằng\ncách lợi dụng những cấu hình đó. Những cấu hình này có thểlà thông tin\nđăng nhập, cổng được mở, protocol giao tiếp không được mã hóa hoặc mã\nhóa kém. ### **3.10** **Không có sựkiên cốvềmặt vật lý**\n\n\nSựkiên cốvềmặt vật lý, phần cứng cho các thiết bịIoT là một yếu tố\ncần thiết.', 'iên cốvềmặt vật lý**\n\n\nSựkiên cốvềmặt vật lý, phần cứng cho các thiết bịIoT là một yếu tố\ncần thiết. Nếu như thiết bịkhông có các phương pháp chống đo điện áp,\nkhông tắt các cổng debug, không có phương pháp xác thực tính toàn vẹn của\nfirmware, người tấn công có thểtrích xuất thông tin nhạy cảm như khóa bí\nmật từthiết bịbằng các phương pháp tấn công phần cứng và sửdụng thông\ntin này cho các cuộc tấn công từxa hoặc tấn công chiếm quyền điều khiển\nthiết bị. 11', '# **Chương 4** **Minh họa**\n\n### **4.1** **Thiết bịđược sửdụng**\n\nThiết bịđược sửdụng cho việc minh họa các lỗhổng trên hệthống IoT là\nthiết bịDIR-820L của D-Link. Thiết bịnày là một thiết bịrouter được sản\nxuất từnăm 2013. Dựán này sẽminh họa 5 lỗhổng khác nhau còn tồn\ntại trên firmware mới nhất của thiết bịnày. Dưới đây là hình ảnh thiết bị\nDIR-820L được lấy từmột trang web bán thiết bị. [12]\n\n\n12', '### **4.2 Setup môi trường**\n\n**Các công cụđược sửdụng:**\n\n\n - **FirmAE** : Công cụtựđộng hóa quá trình trích xuất và thiết lập tiến\ntrình mô phỏng cho firmware của các thiết bịIoT.\n\n\n - **Binwalk** : Công cụtrích xuất hệthống file được chứa trong firmware.\n\n\n **Firmware mod kit (fmk)** : Công cụcho phép trích xuất, chỉnh sửa,\nvà gói lại hệthống file của firmware.\n\n\n - **Ghidra** : Công cụdịch ngược mã nguồn mởvới hỗtrợcho các cấu trúc\nvi xửlý trong IoT như ARM và MIPS.\n\n\n **Burp Suite** : Công cụvới nhiều tính năng giúp phân tích các gói tin\nHTTP/HTTPS mạng.\n\n\n**Môi trường phân tích:**\n\n\n13', '### **4.3 Phân tích firmware**\n\nPhân tích firmware với công cụ **binwalk** cho thấy hệthống file SquashFS\nẩn bên trong firmware. SquashFS là hệthống file phổbiến trên các thiết bị\nnhúng, chủyếu được sửdụng cho phân vùng root vì tính chất read-only của\nnó giúp giảm nguy cơ thiết bịbịhỏng do các thay đổi không mong muốn\nlên hệthống tập tin gốc.\n\n\n14', 'Chúng ta có thểtrích xuất hệthống file SquashFS này bằng tính năng trích\nxuất của binwalk\n\n\nTrong hệthống file này, chúng ta có thểthấy được file **shadow** có chứa bản\n\n\n15', 'hash của mật khẩu người dùng root. Sau khi chạy file này qua **john the**\n**ripper**, mật khẩu của người dùng root đã được phá, mật khẩu này là **root** .\n\n\nTiếp đó, file khởi động **rcS** cho thấy firmware sẽkhởi tạo hai dịch vụ\n**bulkListen** và **ncc2** khi thiết bịbắt đầu hoạt động. Dịch vụ **ncc2** được\nsửdụng đểxửlý các yêu cầu theo chuẩn **Common Gateway Interface**\n**(CGI)** . CGI là một chuẩn giao tiếp cho phép máy chủweb thực thi các\nchương trình bên ngoài đểxửlý các yêu cầu HTTP/HTTPS. Tập tin thực\nthi của **ncc2** có thểđược tìm thấy tại thư mục **/sbin** .\n\n\n16', 'Firmware này chạy trên kiến trúc vi xửlý MIPSEB 32-bit. Công cụdịch\nngược Ghidra, một công cụmã nguồn mởvới khảnăng hỗtrợtốt cho\nkiến trúc MIPS, đã được sửdụng cho các công đoạn dịch ngược của dựán này.\n\n\nCông cụ **checksec** thông báo rằng file nhịphân **ncc2** này cũng không có\ncác chức năng bảo vệlỗhổng overflow. File này cũng không có biểu tượng\ndebug, làm cho công đoạn dịch ngược khó hơn.\n\n\n17', '### **4.4** **Các lỗhổng được khai thác**\n\n#### **4.4.1 Command injection trong tính năng chuẩn đoán** **ping**\n\nLỗhổng này có mã CVE là **CVE-2024-51186** [13]. Đây là lỗhổng trong\ndịch vụ **ncc2** của thiết bịnày. Trong dịch vụ **ncc2** này, có một endpoint xử\nlý CGI request là **ping.ccp** . Endpoint này cho phép chuẩn đoán các thiết\nbịqua mạng bằng cách "ping"các thiết bịđó. Dưới đây là ảnh giao diện cho\nphép người dùng tương tác với tính năng này.\n\n\n18', 'Dưới đây là một request tới **ping.ccp** đã được bắt trong Burp Suite:\n\n\nSau khi dịch ngược file **ncc2**, chúng ta có thểthấy được là hàm\n**FUN_0049e128** sẽxửlý các POST request tới **ping.ccp** . Hàm này\nsẽlấy địa chỉping từtham số **ping_addr** trong request.\n\n\n19', 'Địa chỉping được đưa qua hàm **hasInjectionString**, nhập từthư viện\n**libleopard.so** . Hàm này kiểm tra sựtồn tại của bốn ký tựthường dùng cho\ncommand injection: "‘", "\\", ";", "’"và " _|_ ". Nếu hàm này phát hiện bất kỳ\nký tựnào trong sốnày trong đầu vào của người dùng thì yêu cầu sẽkhông\nđược xửlý.\n\n\n20', 'Tuy nhiên, hàm **hasInjectionString** không kiểm tra hết mọi ký tựtách\nlệnh và có khảnăng được sửdụng cho command injection. Một người tấn\ncông có thểchèn lệnh thông qua ký tựxuống dòng **\\n** (Mã hex là **0x0A** ).\nTừlỗhổng này, chúng ta có thểthực hiện chèn lệnh đểtạo một bind shell\nbằng **telnet** mởởcổng 9999.\n\n\nĐểcó thểphòng chống lỗhổng này, hàm **hasInjectionString** cần black list\ntổng quan hơn, bao gồm nhiều kí tựinjection hơn. Ngoài ra, chúng ta cũng\ncó thểchuyển sang sửdụng white list thay vì black list và chỉtập trung vào\ncác kí tựđược cho phép trong một địa chỉIP.\n\n#### **4.4.2 Command injection trong tính năng DDNS** **check**\n\n\nLỗ hổng này có mã CVE là **CVE-2021-45382** [14]. Endpoint\n**ddns_check.ccp** có lỗ hổng dẫn tới command injection. Hàm\n**callback_ccp_ddns_check** là hàm xử lý các request tới\n\n.\n**ddns_check.ccp**\n\n\n21', 'Hàm **callback_ccp_ddns_check** có sửdụng hàm **doCheck** (được sử\ndụng khi tham số **ccp_act** trong request tới **ddns_check.ccp** được set\nthành **doCheck** ) đểthu thập thông tin DDNS: Tên host, tên người dùng,\nmật khẩu.\n\n\nNhững tham sốnày sẽđược đưa vào hàm **system** . Hàm này sẽchạy\n**ddns_check.c** đểxửlý request.\n\n\nHàm **doCheck** này không có bất kì chức năng nào đểkiểm tra xem đầu vào\ncó bịcommand injection hay không. Dưới đây là minh họa một payload mở\n\n\n22', 'dịch vụtelnet trên cổng 9999 qua command injection vào **ddns_check.ccp** .\nScan Nmap của router cho thấy rằng cổng 9999 đã được mởvà có dịch vụ\nlà telnet.\n\n\nĐểcó thểchống lỗhổng này, hàm **doCheck** cần kiểm tra đầu vào xem có\nký tựinjection nào không bằng white list.\n\n#### **4.4.3 Kiểm soát truy cập kém**\n\n\nGhi chú: Lỗhổng này chưa có mã CVE chính thức.\n\n\nThiết bịDIR-820L không có access control an toàn. Các CGI request\nkhông xác thực session người dùng trước khi xửlý. Thiết bịnày chỉcó một\ncookie là **hasLogin** có giá trịlà 0 hoặc 1. Người tấn công có thểbắt các\nrequest của thiết bịnày, chỉnh sửa nó, và gửi đến thiết bị. Bởi vì không có\ntoken xác thực người dùng, thiết bịnày sẽxửlý bất kì request nào, kểcả\nrequest không đến từngười dùng, cho phép người tấn công chỉnh sửa cấu\nhình của máy đó.\n\n\nChức năng chỉnh sửa mật khẩu admin sẽđược sửdụng đểminh họa\nlỗhổng này. Hàm **FUN_00451208** là hàm xửlý request tới chỉnh sửa\nthông tin cấu hình trong thiết bị.\n\n\n23', 'Mật khẩu mặc định sẽđược đọc từfile cấu hình **/sbin/defaultCfg.txt** .\nKhi mà firmware được load vào thiết bịvà bắt đầu thực thi, file cấu hình đó\nsẽđược copy vào **/var/tmp/cfg.txt** . Bất kì chỉnh sửa vềcấu hình nào sẽ\nđược ghi vào file **cfg.txt** này.\n\n\nHàm **pure_SetDeviceSettings** xửlý request thay đổi mật khẩu admin.\n\n\n24', 'Hàm này sẽsửdụng **sendEvent** đểđiều chỉnh file cấu hình trong\n**/var/tmp** .\n\n\n25', 'Dịch vụ **ncc2** không có chức năng kiểm tra danh tính người dùng hoặc\nkiểm tra mật khẩu cũ trước khi cho phép thay đổi cấu hình. Điều này\ncho phép người tấn công có thểgửi một request tới **get_set.ccp** mà\nkhông cần đăng nhập hoặc biết mật khẩu cũ và vẫn có thểthay đổi mật\nkhẩu admin. Dưới đây là một request thay đổi mật khẩu gửi từmáy attacker.\n\n\nRequest này khi gửi tới router thì sẽthay đổi file cấu hình. Dưới đây là file\n\n\n26', 'cấu hình đã được thay đổi sau khi request trên được gửi tới router:\n\n\nĐểcó thểchống lỗhổng này, thiết bịnày cần thiết lập quản lý session người\ndùng tốt đểphòng chống attacker gửi các request không được xác thực. Hơn\nnữa, thiết bịnày cần yêu cầu mật khẩu cũ khi thay đổi những các cấu hình\nquan trọng như mật khẩu của tài khoản admin.\n\n#### **4.4.4 Chỉnh sửa firmware**\n\n\nGhi chú: Lỗhổng này chưa có mã CVE chính thức.\n\n\nPhương pháp khai thác này có thểđược thực hiện nếu firmware không được\nmã hoắvà thiết bịkhông sửdụng secure boot. Nếu như người tấn công có\nthểtiếp xúc trực tiếp với thiết bịthì họcó thểchỉnh sửa firmware. Họsẽ\ntrích xuất firmware của thiết bị, giải nén firmware đó, chỉnh sửa hoặc đưa\nmã độc của mình vào firmware, và flash firmware đã được chỉnh sửa đó lên\nthiết bị.\n\n\nFirmware của thiết bịnày có thểđược tải trên mạng qua đường link\nchính thức của D-Link [15]. Firmware này có thểđược điều chỉnh bằng công\ncụFirmware Mod Kit (fmk) và flash lên thiết bị. Đầu tiên, fmk sẽtrích\nxuất hệthống file SquashFS trong firmware ra **fmk/rootfs** .\n\n\n27', 'Sau khi đã trích xuất hệthống file, chúng ta có thểthay đổi firmware hoặc\nđưa mã độc vào firmware. Đểminh họa, file **rcS** trong **/etc/init.d**, được sử\ndụng đểchạy chương trình tại thời gian boot, đã được chỉnh sửa sẽmởdịch\nvụtelnet ởcổng 9999.\n\n\nSau khi chỉnh sửa firmware xong, chúng ta có thểdùng fmk đểnén hệthống\n\n\n28', 'file này thành một file **.bin** .\n\n\nVới firmware đã được chỉnh sửa, chúng ta có thểflash cái firmware này lên\nthiết bịqua tính năng emergency flash của D-Link [16]. Hiện tại, em không\ncó thiết bịthật thếnên em sẽmô phỏng firmware đã được chỉnh sửa này\nbằng FirmAE.\n\n\n29', 'Với firmware này, đểcó thểkết nối được với thiết bịthì người tấn công cần\nởchung mạng với router. Đểcó thểkết nối qua mạng Internet, firmware sẽ\ncần có một chương trình backdoor có khảnăng mởreverse shell tới server\ncủa người tấn công bằng **netcat** . Bản **busybox** của firmware hiện tại không\ncó netcat, vậy chúng ta sẽcần import một phiên bản busybox cho kiến\ntrúc vi xửlý MIPSEB có bao gồm netcat vào firmware này. Em đã sửdụng\nMIPSEB busybox v1.21.1. [17]\n\n\nSau khi import **busybox** vào hệthống file của firmware, chúng ta có\nthểtạo ra một script mởreverse shell trong firmware. Script này sẽcheck\nxem thiết bịnày có kết nối internet không và chỉmởreverse shell nếu\nnhư có kết nối Internet. Nếu có kết nối Internet thì **netcat** sẽkết nối tới\nđịa chỉIP trong script ởcổng 4444 và mởshell cho phép tương tác với thiết bị.\n\n\nKhi mô phỏng firmware đã được chỉnh sửa thì chúng ta có thểthấy được là\nfirmware sẽkết nối tới cổng 4444 bằng netcat.\n\n\n30', 'Đểcó thểchống phương pháp khai thác này, firmware cần được mã hóa.\nThiết bịIoT cũng có thểsửdụng **TPM** (Trusted Platform Module) cho\ncông đoạn giải mã và mã hóa. Thiết bịnày cũng có thểsửdụng secure boot\nđểchống việc load firmware không có chữký hợp lệ.\n\n\n31', '# **Chương 5** **Kết luận**\n\nBảo mật cho IoT là một thách thức do hàng tỷthiết bịkết nối, từbộđiều\nnhiệt gia đình đến cảm biến công nghiệp, ngày càng gia tăng. Những thiết bị\nnày thường gặp phải các vấn đềnhư xác thực yếu, kênh truyền không được\nmã hóa và cơ chếcập nhật firmware không an toàn, tất cảđều mởđường\ncho các cuộc tấn công như MITM, phát lại gói tin, can thiệp vào firmware\nvà dò mật khẩu. Dựán này đã thảo luận vềcác mối đe dọa IoT, xác định\ncác phương thức khai thác thực tiễn. Các lỗhổng trên router DIR-820L\nđã minh họa rủi ro lớn trong thiết bịIoT và các điểm yếu cần được khắc phục.\n\n\nĐểbảo mật được hệsinh thái IoT đòi hỏi một cách tiếp cận tổng\nthểtrên nhiều thành phần của hệthống. Dựán với thiết bịD-Link\nDIR-820L cho thấy các cách các thiết bịIoT có thểbịkhai thác và cách bảo\nvệcác thiết bịnày khỏi những cuộc tấn công này, mởhướng cho các triển\nkhai IoT an toàn và bền vững hơn.\n\n\n32', '# **Tài liệu tham khảo**\n\n\n[1] Satyajit Sinha, “State of IoT 2024: Number of connected IoT devices\ngrowing 13% to 18.8 billion globally,” _IoT Analytics_ [, 2024, Link: https:](https://iot-analytics.com/number-connected-iot-devices/)\n[//iot-analytics.com/number-connected-iot-devices/.](https://iot-analytics.com/number-connected-iot-devices/)\n\n\n[2] Kitrum, “Three Layer Architecture in the Internet of\nThings.', 'om/number-connected-iot-devices/)\n\n\n[2] Kitrum, “Three Layer Architecture in the Internet of\nThings. An Examination of Specifications and Security\nThreats,” _Kitrum_ _Blog_, 2023, Link: [https://kitrum.com/blog/](https://kitrum.com/blog/three-layer-architecture-in-the-internet-of-things/)\n[three-layer-architecture-in-the-internet-of-things/.](https://kitrum.com/blog/three-layer-architecture-in-the-internet-of-things/)\n\n\n[3] Matt Brown, “Finding UART and Getting a Root Shell on a Linux\nRouter,” _YouTube_ [, 2022, Link: https://www.youtube.com/watch?app=](https://www.youtube.com/watch?app=desktop&v=HWJddAd2T5Q)\n[desktop&v=HWJddAd2T5Q.](https://www.youtube.com/watch?app=desktop&v=HWJddAd2T5Q)\n\n\n[4] Wikipedia, “Side-channel attack,” _Wikipedia_ [, 2004, Link: https://en.](https://en.wikipedia.org/wiki/Side-channel_attack)\n[wikipedia.org/wiki/Side-channel_attack.](https://en.wikipedia.org/wiki/Side-channel_attack)\n\n\n[5] Matt Brown, “Uncovering Hardcoded Root Password in VStarcam\nCB73 Security Camera,” _Brown Fine Security_ [, 2024, Link: https://](https://brownfinesecurity.com/blog/vstarcam-cb73-hardcoded-root-password/)\n[brownfinesecurity.com/blog/vstarcam-cb73-hardcoded-root-password/', '.](https://brownfinesecurity.com/blog/vstarcam-cb73-hardcoded-root-password/)\n\n\n[6] Krishna Gupta, “IoT Replay Attacks: Safeguarding Business\nIntegrity and Security,” _Blog_, 2024, Link: [https://krishnag.ceo/](https://krishnag.ceo/blog/iot-replay-attacks-safeguarding-business-integrity-and-security/)\n[blog/iot-replay-attacks-safeguarding-business-integrity-and-security/.](https://krishnag.ceo/blog/iot-replay-attacks-safeguarding-business-integrity-and-security/)\n\n\n[7] Wikipedia, “Radio jamming,” _Wikipedia_, 2005, Link: [https://en.](https://en.wikipedia.org/wiki/Radio_jamming)\n[wikipedia.org/wiki/Radio_jamming.](https://en.wikipedia.org/wiki/Radio_jamming)\n\n\n[8] Flashpoint Intel Team, “Mirai Botnet: When Vulnerabilities Travel\nDownstream,” _Flashpoint_, 2016, Link: [https://flashpoint.io/blog/](https://flashpoint.io/blog/mirai-botnet-when-vulnerabilities-travel-downstream/)\n[mirai-botnet-when-vulnerabilities-travel-downstream/.](https://flashpoint.io/blog/mirai-botnet-when-vulnerabilities-travel-downstream/)\n\n\n[9] Alex Hern, “CloudPets stuffed toys leak details of\nhalf a million users,” _The_ _Guardian_, 2017, Link:\n[https://www.theguardian.com/technology/2017/feb/28/](https://ww', 'w.theguardian.com/technology/2017/feb/28/cloudpets-data-breach-leaks-details-of-500000-children-and-adults/)\n[cloudpets-data-breach-leaks-details-of-500000-children-and-adults/.](https://www.theguardian.com/technology/2017/feb/28/cloudpets-data-breach-leaks-details-of-500000-children-and-adults/)\n\n\n33', ' [10] OWASP Foundation, “OWASP IoT Top 10,” _OWASP Wiki_, 2018, Link:\n[https://owasp.org/www-project-internet-of-things/.](https://owasp.org/www-project-internet-of-things/)\n\n\n[11] Vumetric, “Understanding the OWASP IoT Top 10 Security\nRisks,” _Vumetric Blog_ [, 2018, Link: https://www.vumetric.com/blog/](https://www.vumetric.com/blog/what-is-the-owasp-iot-top-10/)\n[what-is-the-owasp-iot-top-10/.](https://www.vumetric.com/blog/what-is-the-owasp-iot-top-10/)\n\n\n[12] Dương Long, “Router D-Link DIR 820L Image,” _Dương Long_, Link:\n[https://duonglong.vn/thiet-bi-mang-router-d-link-dir-820l.](https://duonglong.vn/thiet-bi-mang-router-d-link-dir-820l)\n\n\n[13] 4hsienyang, “CVE-2024-51186,” _National Vulnerability Database_, 2024,\n[Link: https://nvd.nist.gov/vuln/detail/CVE-2024-51186.](https://nvd.nist.gov/vuln/detail/CVE-2024-51186)\n\n\n[14] doudoudedi, “CVE-2021-45382,” _National Vulnerability Database_, 2021,\n[Link: https://nvd.nist.gov/vuln/detail/CVE-2021-45382.](https://nvd.nist.gov/vuln/detail/CVE-2021-45382)\n\n\n[15] D-Link, “DIR-820L Firmware Version 1.05B03,” _D-Link_, Link:\n[https://legacyfiles.us.dlink.com/DIR-820L/REVA/FIRMWARE/](https://legacyfiles.us.dlink.com/DIR-820L/REVA/FIRMW', 'ARE/DIR-820L_REVA_FIRMWARE_1.05B03.ZIP)\n[DIR-820L_REVA_FIRMWARE_1.05B03.ZIP.](https://legacyfiles.us.dlink.com/DIR-820L/REVA/FIRMWARE/DIR-820L_REVA_FIRMWARE_1.05B03.ZIP)\n\n\n[16] s196635, “Emergency Flashing HOW-TO,” _D-Link Forum_ [, Link: http:](http://forums.dlink.com/index.php?topic=44909.0)\n[//forums.dlink.com/index.php?topic=44909.0.](http://forums.dlink.com/index.php?topic=44909.0)\n\n\n[17] Busybox, “Busybox v1.21.1 Download,” _Busybox Downloads_, Link:\n[https://busybox.net/downloads/binaries/1.21.1/.](https://busybox.net/downloads/binaries/1.21.1/)\n\n\n34']
|
utils.py
CHANGED
|
@@ -12,7 +12,7 @@ import pathlib
|
|
| 12 |
API_URL = "https://api.cerebras.ai/v1/chat/completions"
|
| 13 |
CEREBRAS_API_KEY = os.environ['CEREBRAS_API_KEY']
|
| 14 |
|
| 15 |
-
HEADERS = {"Authorization": f"Bearer {CEREBRAS_API_KEY}"}
|
| 16 |
JSON_OBJ_RE = re.compile(r"(\{[\s\S]*\})", re.MULTILINE)
|
| 17 |
|
| 18 |
INPUT_TOKEN_COUNT = np.array([], dtype=int)
|
|
@@ -21,6 +21,7 @@ TOTAL_TOKEN_COUNT = np.array([], dtype=int)
|
|
| 21 |
TOTAL_TOKEN_COUNT_EACH_GENERATION = np.array([])
|
| 22 |
TIME_INFOs = {}
|
| 23 |
|
|
|
|
| 24 |
def _post_chat(messages: list, model: str, temperature: float = 0.2, timeout: int = 60) -> str:
|
| 25 |
payload = {"model": model, "messages": messages, "temperature": temperature}
|
| 26 |
resp = requests.post(API_URL, headers=HEADERS, json=payload, timeout=timeout)
|
|
@@ -82,7 +83,7 @@ def generate_mcqs_from_text(
|
|
| 82 |
' "2": { ... }\n'
|
| 83 |
"}\n\n"
|
| 84 |
"Lưu ý:\n"
|
| 85 |
-
f"- Tạo đúng {n} mục, đánh
|
| 86 |
"- Khóa 'lựa chọn' phải có các phím a, b, c, d.\n"
|
| 87 |
"- 'đáp án' phải là toàn văn đáp án đúng (không phải ký tự chữ cái), và giá trị này phải khớp chính xác với một trong các giá trị trong 'lựa chọn'.\n"
|
| 88 |
"- Không kèm giải thích hay trường thêm.\n"
|
|
@@ -200,6 +201,16 @@ def get_time_info():
|
|
| 200 |
# 'total_time': np.sum(OUTPUT_TOKEN_COUNT),
|
| 201 |
# }
|
| 202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 203 |
|
| 204 |
def save_to_local(path, content):
|
| 205 |
"""
|
|
|
|
| 12 |
API_URL = "https://api.cerebras.ai/v1/chat/completions"
|
| 13 |
CEREBRAS_API_KEY = os.environ['CEREBRAS_API_KEY']
|
| 14 |
|
| 15 |
+
HEADERS = {"Authorization": f"Bearer {CEREBRAS_API_KEY}", "Content-Type": "application/json"}
|
| 16 |
JSON_OBJ_RE = re.compile(r"(\{[\s\S]*\})", re.MULTILINE)
|
| 17 |
|
| 18 |
INPUT_TOKEN_COUNT = np.array([], dtype=int)
|
|
|
|
| 21 |
TOTAL_TOKEN_COUNT_EACH_GENERATION = np.array([])
|
| 22 |
TIME_INFOs = {}
|
| 23 |
|
| 24 |
+
|
| 25 |
def _post_chat(messages: list, model: str, temperature: float = 0.2, timeout: int = 60) -> str:
|
| 26 |
payload = {"model": model, "messages": messages, "temperature": temperature}
|
| 27 |
resp = requests.post(API_URL, headers=HEADERS, json=payload, timeout=timeout)
|
|
|
|
| 83 |
' "2": { ... }\n'
|
| 84 |
"}\n\n"
|
| 85 |
"Lưu ý:\n"
|
| 86 |
+
f"- Tạo đúng {n} mục, đánh số từ 1 tới {n}.\n"
|
| 87 |
"- Khóa 'lựa chọn' phải có các phím a, b, c, d.\n"
|
| 88 |
"- 'đáp án' phải là toàn văn đáp án đúng (không phải ký tự chữ cái), và giá trị này phải khớp chính xác với một trong các giá trị trong 'lựa chọn'.\n"
|
| 89 |
"- Không kèm giải thích hay trường thêm.\n"
|
|
|
|
| 201 |
# 'total_time': np.sum(OUTPUT_TOKEN_COUNT),
|
| 202 |
# }
|
| 203 |
|
| 204 |
+
def log_pipeline(path, content):
|
| 205 |
+
print("Save result to test/mcq_output.json")
|
| 206 |
+
save_to_local(path=path, content=content)
|
| 207 |
+
token_record = get_token_count_record()
|
| 208 |
+
|
| 209 |
+
print("Token Record:")
|
| 210 |
+
for record, value in token_record.items():
|
| 211 |
+
print(f'{record}:{value}', '\n')
|
| 212 |
+
|
| 213 |
+
reset_token_count()
|
| 214 |
|
| 215 |
def save_to_local(path, content):
|
| 216 |
"""
|