├── CNAME ├── README.md ├── css └── default.css ├── demovid ├── README.md ├── captions_arabic.sbv ├── captions_chinese_china.sbv ├── captions_chinese_simplified.sbv ├── captions_chinese_taiwan.sbv ├── captions_english.sbv ├── captions_german.sbv ├── captions_japanese.sbv ├── captions_portuguese_brazil.sbv ├── captions_russian.sbv └── captions_spanish.sbv ├── followup.html ├── gen-qa-index.py ├── images ├── bg01.png ├── down.png ├── downup.svg ├── favicon.ico ├── logo-small.png ├── logo.png └── up.png ├── index.html └── js ├── jquery.min.js ├── modernizr.min.js └── respond.src.js /CNAME: -------------------------------------------------------------------------------- 1 | www.krackattacks.com 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # This is the repository of the website at [krackattacks.com](https://www.krackattacks.com) 6 | 7 | Feel free to submit pull requests to fix spellings mistakes or suggest new Q&A entries. 8 | -------------------------------------------------------------------------------- /css/default.css: -------------------------------------------------------------------------------- 1 | /*********************************************************************************/ 2 | /* Set all elements to default value */ 3 | /*********************************************************************************/ 4 | 5 | html, body { 6 | height: 100%; 7 | } 8 | 9 | body { 10 | margin: 0px; 11 | padding: 0px; 12 | background: #333333; 13 | font-family: 'Muli', sans-serif; 14 | font-size: 12pt; 15 | font-weight: 400; 16 | color: #363636; 17 | } 18 | 19 | @media screen and (max-width:780px) { 20 | body { 21 | font-size: 14px; 22 | /*font-size: 1rem;*/ 23 | /*line-height: 23px;*/ 24 | line-height: 1.4375rem; 25 | font-weight: 400; 26 | font-family: georgia,"times new roman",times,serif; 27 | } 28 | } 29 | 30 | h1, h2, h3 { 31 | margin: 0; 32 | padding: 0; 33 | } 34 | 35 | p, ol, ul { 36 | margin-top: 0px; 37 | } 38 | 39 | @media screen and (max-width:780px) { 40 | ul { padding-left: 18px; } 41 | } 42 | 43 | @media screen and (min-width: 780px) { 44 | p { line-height: 180%; } 45 | } 46 | 47 | strong { 48 | font-weight: bold; 49 | } 50 | 51 | a { 52 | color: #171717; 53 | } 54 | 55 | a:hover { 56 | text-decoration: none; 57 | } 58 | 59 | a img { 60 | border: none; 61 | } 62 | 63 | hr { 64 | display: none; 65 | } 66 | 67 | sup { 68 | font-size: 0.83em; 69 | vertical-align: super; 70 | line-height: 0; 71 | } 72 | 73 | 74 | /*********************************************************************************/ 75 | /* Wrappers */ 76 | /*********************************************************************************/ 77 | 78 | #wrapper { 79 | background: #FFFFFF url(../images/bg01.png) repeat; 80 | } 81 | 82 | .container { 83 | margin: 0px auto; 84 | } 85 | 86 | .clearfix { 87 | clear: both; 88 | } 89 | 90 | #header-wrapper 91 | { 92 | overflow: hidden; 93 | background-size: 100%; 94 | /*background: #333333;*/ 95 | } 96 | 97 | #footer-wrapper 98 | { 99 | overflow: hidden; 100 | padding: 4em 1em; 101 | background: #1E1B1A; 102 | } 103 | 104 | /*********************************************************************************/ 105 | /* Header and text-based logo */ 106 | /*********************************************************************************/ 107 | 108 | #header { 109 | position: relative; 110 | overflow: hidden; 111 | text-align: center; 112 | } 113 | 114 | 115 | #header { 116 | margin: 0 auto; 117 | padding: 15px 0px 15px 0px; 118 | 119 | font-family: 'Muli', sans-serif; 120 | font-size: 12pt; 121 | font-weight: 400; 122 | color: #363636; 123 | line-height: normal; 124 | } 125 | 126 | #logo { 127 | display: inline-block; 128 | width: 180px; 129 | } 130 | 131 | #title { 132 | display: inline-block; 133 | font-size: 2.5em; 134 | /* XXX https://stackoverflow.com/a/21190403 */ 135 | vertical-align: bottom; 136 | text-align: center; 137 | margin-left: 20px; 138 | } 139 | 140 | #header h1 { 141 | /*letter-spacing: 0.10em;*/ 142 | font-size: 1.3em; 143 | /*text-transform: uppercase;*/ 144 | font-weight: normal; 145 | /*color: #fff;*/ 146 | } 147 | 148 | #header h2 { 149 | /*letter-spacing: 1px;*/ 150 | /*color: #FFF;*/ 151 | font-size: 0.9em; 152 | padding-top: 20px; 153 | font-weight: normal; 154 | margin-bottom: 15px; 155 | } 156 | 157 | #header h3 { 158 | margin-top: 40px; 159 | margin-bottom: 30px; 160 | 161 | font-size: 0.45em; 162 | font-weight: normal; 163 | font-style: italic; 164 | /*color: #909090;*/ 165 | } 166 | 167 | #header p { 168 | margin-bottom: 0px; 169 | /*color: #FFF;*/ 170 | } 171 | 172 | #header a { 173 | /*text-decoration: none;*/ 174 | color: #125CCA; 175 | } 176 | 177 | @media screen and (min-width:780px) and (max-width:920px) { 178 | #header { 179 | padding: 15px 0px 15px 0px; 180 | font-size: 0.8em; 181 | } 182 | #logo { 183 | width: 160px; 184 | } 185 | } 186 | 187 | @media screen and (min-width:630px) and (max-width:780px) { 188 | #logo { 189 | width: 140px; 190 | } 191 | #header { 192 | padding: 15px 0px 15px 0px; 193 | font-size: 0.8em; 194 | } 195 | #header h3 { 196 | margin-top: 35px; 197 | margin-bottom: 20px; 198 | } 199 | } 200 | 201 | @media screen and (max-width:630px) { 202 | #title { 203 | display: block; 204 | margin: auto; 205 | margin-top: 10px; 206 | } 207 | #header h3 { 208 | margin-top: 20px; 209 | margin-bottom: 15px 210 | } 211 | #header { 212 | font-size: 0.8em; 213 | padding: 10px 0px 5px 0px; 214 | } 215 | #logo { 216 | width: 180px; 217 | } 218 | } 219 | 220 | /*********************************************************************************/ 221 | /* Main menu */ 222 | /*********************************************************************************/ 223 | 224 | #menu-wrapper { 225 | background: #00AABB; 226 | 227 | line-height: normal; 228 | font-family: 'Muli', sans-serif; 229 | font-size: 12pt; 230 | font-weight: 400; 231 | color: #363636; 232 | 233 | /*height: 100px;*/ 234 | 235 | position:relative; 236 | } 237 | 238 | #main-nav { 239 | overflow: hidden; 240 | /*clear: both;*/ 241 | margin: 0px auto; 242 | /*height: 70px;*/ 243 | } 244 | 245 | #main-nav ul { 246 | margin: 0; 247 | padding: 0px; 248 | list-style: none; 249 | text-align: center; 250 | } 251 | 252 | #main-nav li { 253 | display: inline-block; 254 | background: #00AABB; 255 | } 256 | 257 | #main-nav a, #main-nav #menu_title { 258 | display: block; 259 | letter-spacing: 1px; 260 | padding: 20px 35px; 261 | text-decoration: none; 262 | text-align: center; 263 | text-transform: uppercase; 264 | font-size: 0.80em; 265 | font-weight: 600; 266 | border: none; 267 | color: #FFF; 268 | } 269 | #main-nav #menu_title { 270 | display: none; 271 | background: #00AABB; 272 | padding: 15px 20px; 273 | } 274 | 275 | 276 | #main-nav a:hover, #main-nav .current_page_item a { 277 | text-decoration: none; 278 | } 279 | 280 | #main-nav #menu_button { 281 | display: none; 282 | 283 | margin-left: 50px; 284 | background: transparent url("../images/down.png") no-repeat scroll 15px 18px; 285 | cursor: pointer; 286 | position: absolute; 287 | left: 50%; 288 | height: 8px; 289 | width: 12px; 290 | top: 0px; 291 | /** prevent touch highlight on mobile devices */ 292 | -webkit-tap-highlight-color: rgba(0,0,0,0); 293 | } 294 | 295 | @media screen and (min-width:560px) and (max-width:780px) { 296 | #main-nav a { padding: 15px 20px; } 297 | } 298 | 299 | @media screen and (max-width:560px) { 300 | #main-nav a { padding: 12px 20px; } 301 | #main-nav li { float: none; width: 100%; } 302 | .js #main-nav ul { position: absolute; z-index:9999; } 303 | 304 | .js #main-nav .menu { 305 | display: none; 306 | } 307 | .js #main-nav #menu_button, .js #main-nav #menu_title { 308 | display: block; 309 | } 310 | .js .responsive-toggle-open { 311 | display: block; 312 | } 313 | } 314 | 315 | /*********************************************************************************/ 316 | /* Main page and content */ 317 | /*********************************************************************************/ 318 | 319 | 320 | #page { 321 | position: relative; 322 | overflow: hidden; 323 | padding: 3em 1em 0em 1em; 324 | } 325 | 326 | #content { 327 | margin: 0px auto 50px auto; 328 | max-width: 920px; 329 | } 330 | 331 | #content li { 332 | padding-bottom: 5px; 333 | line-height: 150%; 334 | } 335 | 336 | 337 | /*********************************************************************************/ 338 | /* Titles for sections (and subtitles) */ 339 | /*********************************************************************************/ 340 | 341 | #content h2 342 | { 343 | text-transform: uppercase; 344 | letter-spacing: 0.20em; 345 | font-weight: 700; 346 | font-size: 2em; 347 | color: #00AABB; 348 | margin: 1.6em 0em 1.0em 0em; 349 | /*margin-bottom: 1em;*/ 350 | } 351 | 352 | @media screen and (max-width:780px) { 353 | #content h2 { 354 | letter-spacing: normal; 355 | } 356 | } 357 | 358 | #content h3 359 | { 360 | /*letter-spacing: 0.15em;*/ 361 | font-size: 1.10em; 362 | font-weight: bold; 363 | color: #00AABB; 364 | margin-top: 15px; 365 | margin-bottom: 15px; 366 | margin-top: 30px; 367 | } 368 | 369 | #content h3 a 370 | { 371 | /*letter-spacing: 0.15em;*/ 372 | font-size: 1.10em; 373 | font-weight: bold; 374 | color: #00AABB; 375 | margin-top: 15px; 376 | margin-bottom: 15px; 377 | margin-top: 30px; 378 | 379 | text-decoration: none; 380 | } 381 | 382 | /* 383 | TODO: Optionally a new div to put different line-height text in. 384 | .subtitle p 385 | { 386 | line-height: 150%; 387 | } 388 | */ 389 | 390 | #content .firsttitle { 391 | margin-top: 0px; 392 | } 393 | 394 | /*********************************************************************************/ 395 | /* Bibtex entry */ 396 | /*********************************************************************************/ 397 | 398 | .indent { 399 | padding-left: 40px; 400 | } 401 | 402 | @media screen and (max-width:780px) { 403 | .indent { padding-left: 18px; } 404 | } 405 | 406 | pre { 407 | display: block; 408 | padding: 9.5px; 409 | margin: 0 0 10px; 410 | font-size: 13px; 411 | line-height: 1.42857143; 412 | word-break: break-all; 413 | word-wrap: break-word; 414 | color: #333333; 415 | background-color: #f5f5f5; 416 | border: 1px solid #cccccc; 417 | border-radius: 4px; 418 | } 419 | 420 | /*********************************************************************************/ 421 | /* Other content */ 422 | /*********************************************************************************/ 423 | 424 | #diagram { 425 | margin: 0px auto; 426 | margin-bottom: 15px; 427 | background-position: center; 428 | background-size: contain; 429 | background-repeat: no-repeat; 430 | 431 | background-image: url(../images/diagram.png); 432 | height: 306px; 433 | } 434 | 435 | /** 436 | * Scaling background image according to a given image ratio: 437 | * 438 | * http://stackoverflow.com/questions/600743/how-to-get-div-height-to-auto-adjust-to-background-size 439 | * 440 | * This is only works properly if the image covers the complete width of the div, otherwise there is 441 | * too much top-padding. Hence we only start doing this once the screen is smaller than image width. 442 | * Additionally this is done depending on the specific image to get the correct ratios. 443 | */ 444 | @media screen and (max-width:640px) { 445 | #diagram { 446 | background-image: url(../images/diagram.png); 447 | max-width: 640px; 448 | width: 100%; 449 | height: 0; 450 | padding-top: 47.81%; /* (img-height / img-width * widthpercentage) */ 451 | /* ( 306 / 640 * 100) */ 452 | } 453 | } 454 | @media screen and (max-width:560px) { 455 | #diagram { 456 | background-image: url(../images/diagram_mobile.png); 457 | width: 100%; 458 | height: 0; 459 | padding-top: 62.56%; /* (img-height / img-width * widthpercentage) */ 460 | /* ( 416 / 665 * 100) */ 461 | } 462 | } 463 | 464 | .demo-video { 465 | text-align: center; 466 | padding: 10px 0px 40px 0px; 467 | width: 100%; 468 | margin: 0px auto; 469 | } 470 | 471 | @media screen and (min-width:820px), screen and (max-height:350px) { 472 | .demo-video { 473 | width: 75%; 474 | } 475 | } 476 | 477 | .demo-video-container { 478 | position: relative; 479 | padding-bottom: 71%; 480 | padding-top: 30px; height: 0; overflow: hidden; 481 | } 482 | 483 | .demo-video-container iframe, 484 | .demo-video-container object, 485 | .demo-video-container embed { 486 | position: absolute; 487 | top: 0; 488 | left: 0; 489 | width: 100%; 490 | height: 100%; 491 | } 492 | 493 | 494 | /*********************************************************************************/ 495 | /* Footer */ 496 | /*********************************************************************************/ 497 | 498 | #footer 499 | { 500 | max-width: 920px; 501 | color: #ADADAD; 502 | } 503 | 504 | #footer #awards { 505 | padding-bottom: 30px; 506 | line-height: 150%; 507 | } 508 | 509 | #footer #awards a { 510 | color: #FFF; 511 | text-decoration: none; 512 | } 513 | 514 | #footer .title h2 515 | { 516 | font-weight: 500; 517 | font-size: 1.6em; 518 | color: #FFF; 519 | } 520 | 521 | #footer .title 522 | { 523 | border-color: #2D2926 !important; 524 | } 525 | 526 | #footer .style1 li 527 | { 528 | border-color: #2D2926 !important; 529 | padding: 0.5em 0px; 530 | } 531 | 532 | #footer .style1 a 533 | { 534 | letter-spacing: 0.10em; 535 | font-size:1em; 536 | color: #B1B1B1; 537 | } 538 | 539 | #box-wrapper { 540 | text-align: center; 541 | } 542 | 543 | #box1, #box2 544 | { 545 | display: inline-block; 546 | } 547 | 548 | #box1 { margin-right: 100px; } 549 | /** First downscale: margin between boxes */ 550 | @media screen and (max-width:820px) { 551 | #box1 { margin-right: 10px; } 552 | } 553 | /** Boxes under each other: remove margins, increase text to fill screen, force same width on both */ 554 | @media screen and (max-width:650px) { 555 | #box1, #box2 { margin: 0px; width: 360px; } 556 | #footer li { font-size: 16px; } 557 | } 558 | /** Final downscale: again reduce text size */ 559 | @media screen and (max-width:390px) { 560 | #box1, #box2 { margin: 0px; width: 250px; } 561 | #footer li { font-size: 14px; } 562 | } 563 | 564 | /*********************************************************************************/ 565 | /* List Styles */ 566 | /*********************************************************************************/ 567 | 568 | ul.style1 569 | { 570 | margin: 0; 571 | padding: 0; 572 | list-style: none; 573 | } 574 | 575 | ul.style1 li 576 | { 577 | border-top: solid 1px #E5E5E5; 578 | padding: 0.80em 0; 579 | } 580 | 581 | ul.style1 li:first-child 582 | { 583 | border-top: 0; 584 | padding-top: 0; 585 | } 586 | 587 | ul.style2 588 | { 589 | margin: 0; 590 | padding: 0; 591 | list-style: none; 592 | } 593 | 594 | ul.style2 li 595 | { 596 | border-top: solid 1px #E5E5E5; 597 | padding: 0.80em 0; 598 | } 599 | 600 | ul.style2 li:first-child 601 | { 602 | border-top: 0; 603 | padding-top: 0; 604 | } 605 | 606 | 607 | /*********************************************************************************/ 608 | /* Copyright */ 609 | /*********************************************************************************/ 610 | 611 | #copyright 612 | { 613 | overflow: hidden; 614 | padding: 3em 0em 2em 0em; 615 | text-align: center; 616 | } 617 | 618 | #copyright p 619 | { 620 | letter-spacing: 0.20em; 621 | text-align: center; 622 | text-transform: uppercase; 623 | font-size: 0.80em; 624 | color: #6F6F6F; 625 | } 626 | 627 | #copyright a 628 | { 629 | text-decoration: none; 630 | color: #8C8C8C; 631 | } 632 | 633 | /*********************************************************************************/ 634 | /* Browser-specific fixes */ 635 | /*********************************************************************************/ 636 | 637 | /** So click events are properly handled on iPhone */ 638 | .clickable { cursor: pointer; } 639 | 640 | -------------------------------------------------------------------------------- /demovid/README.md: -------------------------------------------------------------------------------- 1 | # Community Revied 2 | 3 | Arabic 4 | English 5 | Japanese 6 | Spanish 7 | Chinese (Taiwan) 8 | 9 | # Manually Reviewed (some lines verified with google translate) 10 | 11 | Chinese (China) 12 | Chinese (Simplified) 13 | German 14 | Russian 15 | Portuguese (Brazil) 16 | -------------------------------------------------------------------------------- /demovid/captions_arabic.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:02.590 2 | 3 | 4 | 0:00:02.590,0:00:04.500 5 | تم اكتشاف تغرة خطيرة على WPA2 6 | 7 | 0:00:10.540,0:00:13.980 8 | أولا، سوف تستخدم جهاز بنظام الاندرويد للاتصال بشبكة testnetwork 9 | 10 | 0:00:14.020,0:00:16.080 11 | سوف تكون الشبكه الحاليه 12 | 13 | 0:00:16.260,0:00:19.020 14 | لاحظ أن الشبكة تستخدم تشفير WPA2 15 | 16 | 0:00:19.020,0:00:21.300 17 | كما هو مبين في رمز القفل 18 | 19 | 0:00:21.480,0:00:24.220 20 | بالإضافة إلى ذلك، عند زيارة موقع ، على سبيل المثال، match.com، 21 | 22 | 0:00:24.220,0:00:27.620 23 | في متصفح الاندرويد سوف تستخدم بروتوكول التشفير https كطبقه من الحمايه 24 | 25 | 0:00:27.780,0:00:30.340 26 | يشار الي بروتوكول https برمز القفل الاخضر 27 | ملحوظه : https هو برتكول تشفير هو نظام نقل مواد الإنترنت عبر الشبكة العنكبوتية تكون البيانات مشفره 28 | (Hypertext Transfer Protocol Secure) اختصار 29 | يضمن حماية معقولة من التنصت والهجمات والقراصنة، شريطة أن يتم استخدام الأجنحة الكافية والشفرات والتحقق من هذه الشهادة هو الخادم 30 | 31 | 0:00:30.340,0:00:33.780 32 | خاصه عند عرض صفحه الويب 33 | 34 | 0:00:33.780,0:00:40.600 35 | وبعبارة أخرى، يتم حماية جميع المعلومات المرسلة بشكل آمن باستخدام كل من WPA2 و HTTPS 36 | 37 | 0:00:41.320,0:00:45.140 38 | دعونا الآن نري الأدوات التي سيتم استخدامها لمهاجمة جهاز الاندرويد ولينكس 39 | 40 | 0:00:45.660,0:00:49.300 41 | اولا نقوم باستعمال هذا الامر علي البرنامج النصي لبداء الهجوم علي WPA2 42 | 43 | 0:00:49.380,0:00:52.960 44 | لاحظ ان هذا الامر اضيف له اسم الشبكه التي سوف يتم الهجوم عليها . 45 | 46 | 0:00:53.160,0:00:55.680 47 | يجب ان تستهدف جهاز واحد فقط محدد حتي تبداء الهجوم 48 | ملحوظه : سوف تستعمل اسم الشبكه والماك الخاص بالجهاز المستهدف ليتم الهجوم 49 | 50 | 0:00:56.020,0:00:59.760 51 | تبدأ الأدوات من خلال البحث عن شبكة واي فاي المحمية ثم يتم الهجوم علي الشبكه 52 | 53 | 0:01:00.340,0:01:02.560 54 | يتم نسخ بيانات الشبكه علي Channel اخر 55 | ملحوظه : Channel هي عدد قنوات الاتصال 56 | 57 | 0:01:02.560,0:01:07.420 58 | هذا الاستنساخ يكون سلبي وضار علي الشبكه ويتمكن المهاجم علي التعامل والتلاعب في صفحات المواقع 59 | 60 | 0:01:07.420,0:01:10.460 61 | قمنا باستعمال هذا الاسلوب لنريكو الضعف الذي قمنا باكتشافه 62 | 63 | 0:01:11.000,0:01:15.460 64 | ثانيا، تأكد من أن الضحية قامت بالاتصال بالشبكه الإنترنت الضاره لدينا 65 | 66 | 0:01:15.760,0:01:19.100 67 | بالاضافه الي ذلك سوف نستعمل اداه sslstrip 68 | 69 | 0:01:19.100,0:01:24.040 70 | ستحاول هذه الأداة إزالة حماية https الإضافية لمواقع الويب التي تمت تهيئتها بشكل غير صحيح 71 | 72 | 0:01:24.780,0:01:29.420 73 | وأخيرا، سوف استخدام اداه wireshark لالتقاط أي بيانات 74 | 75 | 0:01:33.740,0:01:35.860 76 | أنت الآن على استعداد لتنفيذ الهجوم 77 | 78 | 0:01:36.000,0:01:40.300 79 | لذلك دعونا نذهب إلى الهاتف الذكي ومن ثم الاتصال بالشبكه المحمية بتشفير WPA2 80 | 81 | 0:01:40.700,0:01:42.295 82 | يقوم الضحيه بتفعيل الشبكه Wi-Fi 83 | 84 | 0:01:42.295,0:01:44.535 85 | يتم جهاز الاندرويد بالبحث عن الشبكه 86 | ملحوظه : الشبكه التي تم عمل الهجوم عليها :) 87 | 88 | 0:01:45.960,0:01:51.600 89 | وبمجرد أن يكتشف الشبكة، فإنه سيحاول الاتصال بشبكة الحقيقيه، وهو ليس ما نريد 90 | 91 | 0:01:51.900,0:01:58.020 92 | يمكن حل هذا المشكله عن طريقه خداع اجهزه الاندرويد بتغير channel عن طريق ارسال امر حقن ليقوم الاندرويد بالاتصال channel مختلفه 93 | 94 | 0:01:58.260,0:02:01.920 95 | هذا الخدعه تقوم بجعل المتصل يقوم بالاتصال بالشبكه الضاره او الشبكه التي يتم فيها الهجوم 96 | 97 | 0:02:02.460,0:02:07.500 98 | في الاساس يعتبر هذا الهجوم ما يسمي man in the middle attack 99 | بين الضحيه وشبكه Wi-Fi 100 | 101 | 0:02:07.620,0:02:10.500 102 | وهذا يسمح لنا لمعالجة الرسائل بشكل موثوق 103 | 104 | 0:02:10.500,0:02:13.900 105 | وتنفيذ هجوم إعادة التثبيت الرئيسي ضد 4-way handshake 106 | 107 | 0:02:13.980,0:02:16.380 108 | عادة، بعد تنفيذ مثل هذا الهجوم 109 | 110 | 0:02:16.380,0:02:19.540 111 | فإن الضحية تعمل علي اعاده استخدام nonces عند تشفير البيانات 112 | 113 | 0:02:19.540,0:02:22.420 114 | وهذا يسمح لنا لاسترداد أي بيانات مشفرة 115 | 116 | 0:02:22.500,0:02:24.780 117 | ومع ذلك، ويرجع ذلك إلى الثغره 118 | 119 | 0:02:24.780,0:02:28.105 120 | لن يقوم Android و Linux بإعادة تثبيت المفتاح السري الفعلي 121 | 122 | 0:02:28.105,0:02:31.535 123 | بدلا من ذلك، سيتم إعادة تثبيت all-zero مفتاح التشفير 124 | 125 | 0:02:31.580,0:02:34.215 126 | هذا يجعل محاكمة لاعتراض والتلاعب 127 | 128 | 0:02:34.220,0:02:36.820 129 | بجميع البيانات التي تنتقل من قبل هذه الأجهزة 130 | 131 | 0:02:37.760,0:02:42.940 132 | عندما نذهب الآن إلى Wireshark، يمكننا أن نرى بالفعل تم اعتراض كمية كبيرة من البيانات 133 | 134 | 0:02:43.200,0:02:49.020 135 | لاحظ أن عادة كل هذه البيانات المشفرة باستخدام WPA2 وبالتالي لا يمكن قراءتها من قبل المهاجم. 136 | 137 | 0:02:49.240,0:02:52.820 138 | ومع ذلك، من دون معرفة كلمة السر لهذه الشبكة wifi المحمية 139 | 140 | 0:02:52.820,0:02:55.440 141 | يمكننا قراءة جميع الحزم التي يرسلها الضحية 142 | 143 | 0:02:55.460,0:02:59.740 144 | وهذا يدل بوضوح على أننا تجاوزنا بنجاح WPA2 145 | 146 | 0:03:00.620,0:03:04.000 147 | دعونا الآن زيارة موقع على جهاز Android من الضحية 148 | 149 | 0:03:04.065,0:03:06.855 150 | وعلى وجه الخصوص، سوف اقوم بزيارة موقع match.com مرة أخرى 151 | 152 | 0:03:10.520,0:03:15.360 153 | كما ترون الآن، لم يعد هناك قفل HTTPS الأخضر على شريط عنوان المتصفح 154 | 155 | 0:03:15.420,0:03:20.000 156 | وهذا يعني أن الموقع لم يعد يستخدم HTTPS كطبقة إضافية من الحماية 157 | 158 | 0:03:20.460,0:03:24.260 159 | لاحظ أنك قادر على تجاوز HTTPS باستخدام أداة sslstrip 160 | 161 | 0:03:24.260,0:03:29.540 162 | على الرغم من أن هذه المسألة من تجاوز HTTPS لا يعمل في تكوين المواقع بشكل صحيح 163 | 164 | 0:03:32.500,0:03:37.120 165 | لسوء الحظ، العديد من المستخدمين لا يدركون HTTPS لم تعد تستخدم 166 | ملحوظه : هنا انصح بشده بالوعي الكافي عند دخول اي شبكه بمعني لو قمت بالدخول الي شبكه وقمت بزياره موقع مركب بروتوكول https ولم تجده فيجب ان تشك في هذه الشبكه 167 | 168 | 0:03:37.120,0:03:41.180 169 | وبالتالي سوف تستمر في تسجيل الدخول باستخدام عنوان البريد الإلكتروني الحقيقي وكلمة المرور 170 | 171 | 0:03:45.100,0:03:49.720 172 | المهاجم هو الآن قادرة على اعتراض عنوان البريد الإلكتروني وكلمة المرور للضحية. 173 | 174 | 0:03:49.720,0:03:52.200 175 | وبطبيعة الحال، وهذا هو مجرد تجربه باستخدام حساب وهمي 176 | 177 | 0:03:52.200,0:03:54.040 178 | وهذا يعني فشل تسجيل الدخول 179 | 180 | 0:03:54.320,0:03:58.100 181 | ومع ذلك، فإن المهاجم قادر على معرفة كلمة المرور التي نحاول استخدامها 182 | 183 | 0:03:58.100,0:04:01.040 184 | لذلك دعونا نذهب إلى المهاجم والبحث عن محاولة تسجيل الدخول 185 | 186 | 0:04:07.220,0:04:12.620 187 | يمكننا أن نرى أن المهاجم كان في الواقع قادرا على اعتراض اسم المستخدم وكلمة المرور التي تستخدم الضحية 188 | 189 | 0:04:13.600,0:04:19.400 190 | لتجنب وقوع ضحية لهذا الهجوم ضد WPA2، يجب عليك تحديث جميع أجهزة Wi-Fi الخاص بك 191 | تم الترجمه البسيطه من طرف : Golden-Security 192 | https://www.facebook.com/Mrm0hm3d 193 | 194 | -------------------------------------------------------------------------------- /demovid/captions_chinese_china.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:04.340 2 | 这个视频是基于“密钥重安装攻击:在 WPA2 中强制重用随机数“这篇论文 3 | 4 | 0:00:04.500,0:00:07.440 5 | 来展示我们在 WPA2 中发现的弱点 6 | 7 | 0:00:07.440,0:00:10.400 8 | 是如何被用于攻击 Android 和 Linux 设备的 9 | 10 | 0:00:10.540,0:00:13.980 11 | 首先,我会用一台 Android 设备来连接到我们的测试网络(名为 testnetwork) 12 | 13 | 0:00:14.020,0:00:16.080 14 | 这将在后面的展示中作为例子 15 | 16 | 0:00:16.260,0:00:19.020 17 | 注意到这个网络使用了 WPA2 加密 18 | 19 | 0:00:19.020,0:00:21.300 20 | 正如这个锁标所表示的 21 | 22 | 0:00:21.480,0:00:24.220 23 | 此外,在访问诸如 match.com 的网站时 24 | 25 | 0:00:24.220,0:00:27.620 26 | Android 会使用 HTTPS 作为额外的安全保护 27 | 28 | 0:00:27.780,0:00:30.340 29 | 这可以由地址栏的 HTTPS 绿锁来表明 30 | 31 | 0:00:30.340,0:00:33.780 32 | 而且当你查看网页信息时,这也会被重点标注 33 | 34 | 0:00:33.780,0:00:40.640 35 | 换句话说,所有传输的信息都是受到 WPA2 和 HTTPS 双重保护的 36 | 37 | 0:00:41.320,0:00:45.140 38 | 让我们现在启动 Android 和 Linux 设备的攻击程序 39 | 40 | 0:00:45.660,0:00:49.300 41 | 首先,这行命令是用来启动 WPA2 攻击脚本的 42 | 43 | 0:00:49.380,0:00:52.960 44 | 注意到,我在启动脚本时声明了所攻击的加密 Wi-Fi 网络 45 | 46 | 0:00:53.160,0:00:55.680 47 | 而且只会针对某一个已连接的设备 48 | 49 | 0:00:56.020,0:00:59.760 50 | 这个工具首先会搜索将被攻击的加密 Wi-Fi 网络 51 | 52 | 0:01:00.340,0:01:02.560 53 | 接着,我们会将这个网络在不同的频段克隆一份 54 | 55 | 0:01:02.560,0:01:07.420 56 | 这份克隆的网络使得攻击者可以控制 Wi-Fi 握手包 57 | 58 | 0:01:07.420,0:01:10.460 59 | 这一点是利用我们所发现的弱点所必须的 60 | 61 | 0:01:11.000,0:01:15.460 62 | 接下来,受攻击者需要能够通过我们的克隆网络连接到互联网 63 | 64 | 0:01:15.760,0:01:19.100 65 | 然后,还要多做一步就是启动 sslstrip 工具 66 | 67 | 0:01:19.100,0:01:24.040 68 | 这个工具会尝试移除未正确配置的网站上的 HTTPS 保护 69 | 70 | 0:01:24.780,0:01:29.420 71 | 最后,我们会用到 Wireshark 来捕捉所有客户端所传输的信息 72 | 73 | 0:01:33.740,0:01:35.860 74 | 现在,你已经准备好进行攻击了 75 | 76 | 0:01:36.000,0:01:40.300 77 | 让我们回到被攻击的设备上,然后连接到这个 WPA2 保护的测试网络 78 | 79 | 0:01:40.700,0:01:42.295 80 | 当受害者启用 Wi-Fi 时 81 | 82 | 0:01:42.295,0:01:44.535 83 | Android 系统会搜索之前连接过的测试网络 84 | 85 | 0:01:45.960,0:01:51.600 86 | 当它搜索到测试网络时,Android 会尝试连接到真实的测试网络,而这当然不是我们所期待的 87 | 88 | 0:01:51.900,0:01:58.020 89 | 幸运的是,我们只需要发送一些特殊的 Wi-Fi 数据帧,就可以让设备使用不同的频道 90 | 91 | 0:01:58.260,0:02:01.920 92 | 这会欺骗 Android 系统来连接我们设立的克隆网络 93 | 94 | 0:02:02.460,0:02:07.500 95 | 基本上,我们已经建立了一个受害者和真实的 Wi-Fi 网络之间的中间人身份 96 | 97 | 0:02:07.620,0:02:10.500 98 | 这使得我们可以有效地控制报文 99 | 100 | 0:02:10.500,0:02:13.900 101 | 并在四重握手时进行密钥重安装攻击 102 | 103 | 0:02:13.980,0:02:16.380 104 | 正常来说,当我们发动这样的攻击时 105 | 106 | 0:02:16.380,0:02:19.540 107 | 受害者会在加密数据帧时重用随机数 108 | 109 | 0:02:19.540,0:02:22.420 110 | 这使得我们可以恢复被加密的数据 111 | 112 | 0:02:22.500,0:02:24.780 113 | 然而,由于实现上的问题 114 | 115 | 0:02:24.780,0:02:28.105 116 | Android 和 Linux 不会重安装实际的加密密钥 117 | 118 | 0:02:28.105,0:02:31.535 119 | 而是会重安装一个全为零的加密密钥 120 | 121 | 0:02:31.580,0:02:36.820 122 | 这使得我们可以监听并控制所有设备间传输的信息 123 | 124 | 0:02:37.760,0:02:42.940 125 | 我们此时回到 Wireshark,就会看到大量的数据包被截获 126 | 127 | 0:02:43.200,0:02:49.020 128 | 正常情况下,这些数据包应该被 WPA2 加密,攻击者无法看到明文数据 129 | 130 | 0:02:49.240,0:02:52.820 131 | 然而,在不知道受保护的 Wi-Fi 网络的密码的情况下 132 | 133 | 0:02:52.820,0:02:55.440 134 | 我们通过攻击可以看到所有受害者正在传输的明文数据包 135 | 136 | 0:02:55.460,0:02:59.740 137 | 这表明我们已经成功绕过了 WPA2 加密 138 | 139 | 0:03:00.620,0:03:04.000 140 | 现在让我们在受害者的 Android 设备上访问网站 141 | 142 | 0:03:04.065,0:03:06.855 143 | 为了方便演示,我们会再次访问 match.com 144 | 145 | 0:03:10.520,0:03:15.360 146 | 现在你可以看到,地址栏上不再有绿色的 HTTPS 锁标志 147 | 148 | 0:03:15.420,0:03:20.000 149 | 这意味着网站不再受到 HTTPS 的额外安全保护 150 | 151 | 0:03:20.460,0:03:24.260 152 | 要注意的是,你可以使用 sslstrip 来绕过 HTTPS 的保护 153 | 154 | 0:03:24.260,0:03:29.540 155 | 虽然这种绕过方式并不适用于已正确配置的 HTTPS 网站 156 | 157 | 0:03:29.545,0:03:32.020 158 | 仍然有很大部分的网站会受到攻击 159 | 160 | 0:03:32.500,0:03:37.120 161 | 很不幸的是,很多用户并不会意识到网站不再使用 HTTPS 162 | 163 | 0:03:37.120,0:03:41.180 164 | 因此继续使用自己的邮箱和密码登录 165 | 166 | 0:03:45.100,0:03:49.720 167 | 攻击者就可以看到受害者所使用的邮箱和密码 168 | 169 | 0:03:49.720,0:03:52.200 170 | 当然,这里只是一个使用虚假账户的演示 171 | 172 | 0:03:52.200,0:03:54.040 173 | 所以登录会失败 174 | 175 | 0:03:54.320,0:03:58.100 176 | 但没关系,现在攻击者可以看到我们所尝试的密码 177 | 178 | 0:03:58.100,0:04:01.040 179 | 让我们回到攻击者那边,搜索刚刚的登录尝试 180 | 181 | 0:04:07.220,0:04:12.620 182 | 我们可以看到,攻击者真的可以看到受害者所使用的用户名和密码 183 | 184 | 0:04:13.600,0:04:19.400 185 | 要避免受到这样的 WPA2 攻击,你必须更新所有使用 Wi-Fi 的设备 186 | 187 | -------------------------------------------------------------------------------- /demovid/captions_chinese_simplified.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:02.590 2 | 本视频基于 3 | 「密钥重装攻击(Key Reinstallation Attacks)」 4 | 5 | 0:00:02.590,0:00:04.505 6 | 将演示我们在 WPA2 中发现的漏洞 7 | 8 | 0:00:04.505,0:00:07.435 9 | 利用在 WPA2 连接中强制重用随机数 10 | 11 | 0:00:07.440,0:00:10.400 12 | 可以用来攻击 Android 和 Linux 设备 13 | 14 | 0:00:10.540,0:00:13.980 15 | 首先,将 Android 设备连接到我们的测试 Wi-Fi “testnetwork” 16 | 17 | 0:00:14.020,0:00:16.080 18 | 此时并没有攻击 19 | 20 | 0:00:16.260,0:00:19.020 21 | 请注意,该网络正在使用 WPA2 加密 22 | 23 | 0:00:19.020,0:00:21.300 24 | 所以会有一个“锁”符号 25 | 26 | 0:00:21.480,0:00:24.220 27 | 接下来访问一个示例网站:match.com 28 | 29 | 0:00:24.220,0:00:27.620 30 | Android 可以使用 HTTPS 这一额外的加密层 31 | 32 | 0:00:27.780,0:00:30.340 33 | 绿色的“小锁”意味着正在使用 HTTPS 34 | 35 | 0:00:30.340,0:00:33.780 36 | 并且查看页面信息时也会特别提示 37 | 38 | 0:00:33.780,0:00:40.600 39 | 换言之,所有传输的数据通过 WPA2 和 HTTPS 进行了双重加密保护 40 | 41 | 0:00:41.320,0:00:45.140 42 | 现在开始攻击, 43 | 这个工具可以被用来攻击 Android 和 Linux 设备 44 | 45 | 0:00:45.660,0:00:49.300 46 | 第一步,用以下命令开启 WPA2 攻击脚本 47 | 48 | 0:00:49.380,0:00:52.960 49 | 请注意,这是一个受保护的网络 50 | 51 | 0:00:53.160,0:00:55.680 52 | 针对其中的一个特定设备发起攻击 53 | 54 | 0:00:56.020,0:00:59.760 55 | 该工具启动后将搜索要被攻击的网络 56 | 57 | 0:00:59.960,0:01:02.560 58 | 然后会在不同信道对网络进行克隆 59 | 60 | 0:01:02.560,0:01:07.420 61 | 这种恶意的克隆可以使攻击者更可靠地操纵握手信息 62 | 63 | 0:01:07.420,0:01:10.460 64 | 这个有用的弱点由我们发现 65 | 66 | 0:01:11.000,0:01:15.460 67 | 第二步,确保受害者可以通过恶意网络访问互联网 68 | 69 | 0:01:15.760,0:01:19.100 70 | 然后,运行 “sslstrip” 工具进行接下来的操作 71 | 72 | 0:01:19.100,0:01:24.040 73 | 该工具将尝试对未正确配置的网站移除 HTTPS 保护 74 | 75 | 0:01:24.780,0:01:29.420 76 | 最后,我使用 “wireshark” 截获受害者客户端发送的任何数据 77 | 78 | 0:01:33.740,0:01:35.860 79 | 现在你已经做好了攻击准备 80 | 81 | 0:01:36.000,0:01:40.300 82 | 我们用智能手机连接到 WPA2 保护的 "testnetwork" 试试看 83 | 84 | 0:01:40.700,0:01:42.295 85 | 一旦受害者开启 Wi-Fi 86 | 87 | 0:01:42.295,0:01:44.535 88 | Android 将会搜索到 “testnetwork” 89 | 90 | 0:01:45.960,0:01:51.600 91 | 搜索到后将会尝试连接到真正的 “testnetwork”,这样就会失败 92 | 93 | 0:01:51.900,0:01:58.020 94 | 好在可以通过发送特殊的 Wi-Fi 帧使 Android 切换到不同的信道 95 | 96 | 0:01:58.260,0:02:01.920 97 | 这样就可以欺骗 Android 与克隆的恶意网络建立连接 98 | 99 | 0:02:02.460,0:02:07.500 100 | 此时此刻,我们正处于受害者和真正网络中间的位置 101 | 102 | 0:02:07.620,0:02:10.500 103 | 这使我们能够可靠地操纵信息 104 | 105 | 0:02:10.500,0:02:13.900 106 | 以便对 4 次握手进行“密钥重装攻击” 107 | 108 | 0:02:13.980,0:02:16.380 109 | 通常情况下,执行这样的攻击后 110 | 111 | 0:02:16.380,0:02:19.540 112 | 受害者会重新使用随机数加密数据帧 113 | 114 | 0:02:19.540,0:02:22.420 115 | 这使我们能够解密任何被加密的数据 116 | 117 | 0:02:22.500,0:02:24.780 118 | 由于存在漏洞 119 | 120 | 0:02:24.780,0:02:28.105 121 | Android 和 Linux 不会重新安装正确的密钥 122 | 123 | 0:02:28.105,0:02:31.535 124 | 相反,他们会安装一个全零加密的密钥 125 | 126 | 0:02:31.580,0:02:36.800 127 | 这使得我们更容易截获和修改该设备传输的所有数据 128 | 129 | 0:02:37.760,0:02:42.940 130 | 当我们打开 “Wireshark”,可以看到截获的大量数据 131 | 132 | 0:02:43.200,0:02:49.020 133 | 请注意,通常攻击者无法明文读取被 WPA2 加密的数据 134 | 135 | 0:02:49.240,0:02:52.820 136 | 但是,我们可以在不知道 Wi-Fi 密码的前提下 137 | 138 | 0:02:52.820,0:02:55.440 139 | 明文读取受害者发送的所有数据包 140 | 141 | 0:02:55.460,0:02:59.740 142 | 这意味着,我们已经成功地绕过了 WPA2 保护机制 143 | 144 | 0:03:00.620,0:03:04.000 145 | 现在,来看看受害者用 Android 访问一个网站 146 | 147 | 0:03:04.065,0:03:06.855 148 | 还是刚才的那个网站 match.com 149 | 150 | 0:03:10.520,0:03:15.360 151 | 你现在可以看到,浏览器地址栏上面已经没有了绿色的 HTTPS “锁” 152 | 153 | 0:03:15.420,0:03:20.000 154 | 这意味着网站没有使用 HTTPS 作为额外的保护 155 | 156 | 0:03:20.460,0:03:24.260 157 | 请注意,你需要用 “sslstrip” 工具绕过 HTTPS 158 | 159 | 0:03:24.260,0:03:29.540 160 | 虽然,绕过 HTTPS 在绝大数正确配置的网站都不起作用 161 | 162 | 0:03:29.545,0:03:32.020 163 | 但绕过 HTTPS 起到了重要作用 164 | 165 | 0:03:32.500,0:03:37.120 166 | 很多人通常不会察觉已经不再使用 HTTPS 了 167 | 168 | 0:03:37.120,0:03:41.180 169 | 因此受害者会继续输入真正的电子邮箱和密码并登录 170 | 171 | 0:03:45.100,0:03:49.720 172 | 现在攻击者可以截获电子邮箱地址和密码了 173 | 174 | 0:03:49.720,0:03:52.200 175 | 这只是用来演示的假帐户 176 | 177 | 0:03:52.200,0:03:54.040 178 | 所以登录失败 179 | 180 | 0:03:54.320,0:03:58.100 181 | 然而攻击者也能看到输入的演示帐户密码 182 | 183 | 0:03:58.100,0:04:01.040 184 | 现在去看看攻击者收集到的登录尝试 185 | 186 | 0:04:07.220,0:04:12.620 187 | 我们可以看到,攻击者截获了受害者的用户名和密码 188 | 189 | 0:04:13.600,0:04:19.400 190 | 为了避免您成为 WPA2 攻击的受害者, 191 | 请您务必更新所有 Wi-Fi 设备 192 | 193 | -------------------------------------------------------------------------------- /demovid/captions_chinese_taiwan.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:02.590 2 | 影片根據 「金鑰重灌攻擊(Key Reinstallation Attacks)」 3 | 4 | 0:00:02.590,0:00:04.505 5 | 將演示我們在 WPA2 中發現的漏洞 6 | 7 | 0:00:04.505,0:00:07.435 8 | 利用在 WPA2 連線中強制重用亂數 9 | 10 | 0:00:07.440,0:00:10.400 11 | 可以用來攻擊 Android 和 Linux 裝置 12 | 13 | 0:00:10.540,0:00:13.980 14 | 首先,將 Android 裝置連線到我們的實驗 Wi-Fi 「testnetwork」 15 | 16 | 0:00:14.020,0:00:16.080 17 | 此時並沒有攻擊 18 | 19 | 0:00:16.260,0:00:19.020 20 | 請注意,該存取點正在使用 WPA2 加密 21 | 22 | 0:00:19.020,0:00:21.300 23 | 所以會有一個「鎖」 24 | 25 | 0:00:21.480,0:00:24.220 26 | 接下來存取一個範例網頁:match.com 27 | 28 | 0:00:24.220,0:00:27.620 29 | Android 可以使用 HTTPS 這一額外的加密層 30 | 31 | 0:00:27.780,0:00:30.340 32 | 綠色的「小鎖」意味著正在使用 HTTPS 33 | 34 | 0:00:30.340,0:00:33.780 35 | 並且查看頁面資訊時也會特別提示 36 | 37 | 0:00:33.780,0:00:40.600 38 | 換言之,所有連線的資料透過 WPA2 和 HTTPS 進行了雙重加密保護 39 | 40 | 0:00:41.320,0:00:45.140 41 | 現在開始攻擊, 42 | 這個工具可以被用來攻擊 Android 和 Linux 裝置 43 | 44 | 0:00:45.660,0:00:49.300 45 | 第一步,用以下指令碼開啟 WPA2 攻擊程式 46 | 47 | 0:00:49.380,0:00:52.960 48 | 請注意,這是一個受保護的存取點 49 | 50 | 0:00:53.160,0:00:55.680 51 | 針對其中的一個特定裝置發起攻擊 52 | 53 | 0:00:56.020,0:00:59.760 54 | 工具啟動後將搜索要被攻擊的存取點 55 | 56 | 0:00:59.960,0:01:02.560 57 | 然後會在不同頻道對存取點進行複製 58 | 59 | 0:01:02.560,0:01:07.420 60 | 這種惡意的複製可以使攻擊者更可靠地操縱握手通訊 61 | 62 | 0:01:07.420,0:01:10.460 63 | 這個有用的弱點由我們發現 64 | 65 | 0:01:11.000,0:01:15.460 66 | 第二步,確保受害者可以通過惡意存取點存取互聯網 67 | 68 | 0:01:15.760,0:01:19.100 69 | 然後,執行 「sslstrip」 工具進行接下來的操作 70 | 71 | 0:01:19.100,0:01:24.040 72 | 該工具將嘗試對未正確配置的網頁移除 HTTPS 保護 73 | 74 | 0:01:24.780,0:01:29.420 75 | 最後,我使用 「wireshark」 截獲受害者用戶端傳送的任何資料 76 | 77 | 0:01:33.740,0:01:35.860 78 | 現在你已經做好了攻擊準備 79 | 80 | 0:01:36.000,0:01:40.300 81 | 我們用智慧手機接入到 WPA2 保護的 "testnetwork" 試試看 82 | 83 | 0:01:40.700,0:01:42.295 84 | 一旦受害者開啟 Wi-Fi 85 | 86 | 0:01:42.295,0:01:44.535 87 | Android 將會搜索到 「testnetwork」 88 | 89 | 0:01:45.960,0:01:51.600 90 | 搜索到後將會嘗試接入到真正的 「testnetwork」,這樣就會失敗 91 | 92 | 0:01:51.900,0:01:58.020 93 | 好在可以通過傳送特殊的 Wi-Fi 幀使 Android 切換到不同的頻道 94 | 95 | 0:01:58.260,0:02:01.920 96 | 這樣就可以讓 Android 與複製的惡意存取點建立連線 97 | 98 | 0:02:02.460,0:02:07.500 99 | 此時此刻,我們正處於受害者和真正存取點之間的位置 100 | 101 | 0:02:07.620,0:02:10.500 102 | 這使我們能夠可靠地操縱通訊 103 | 104 | 0:02:10.500,0:02:13.900 105 | 以便對 4 次握手進行「金鑰重灌攻擊」 106 | 107 | 0:02:13.980,0:02:16.380 108 | 通常情況下,執行這樣的攻擊後 109 | 110 | 0:02:16.380,0:02:19.540 111 | 受害者會重新使用亂數加密資料幀 112 | 113 | 0:02:19.540,0:02:22.420 114 | 這使我們能夠解密任何被加密的資料 115 | 116 | 0:02:22.500,0:02:24.780 117 | 由於存在漏洞 118 | 119 | 0:02:24.780,0:02:28.105 120 | Android 和 Linux 不會重新安裝正確的金鑰 121 | 122 | 0:02:28.105,0:02:31.535 123 | 相反,他們會安裝一個全零加密的金鑰 124 | 125 | 0:02:31.580,0:02:36.800 126 | 這使得我們可以截獲和修改該裝置連線的所有資料 127 | 128 | 0:02:37.760,0:02:42.940 129 | 當我們打開 「Wireshark」,可以看到截獲的大量資料 130 | 131 | 0:02:43.200,0:02:49.020 132 | 請注意,通常攻擊者無法明文讀取被 WPA2 加密的資料 133 | 134 | 0:02:49.240,0:02:52.820 135 | 但是,我們可以在不知道 Wi-Fi 密碼的前提下 136 | 137 | 0:02:52.820,0:02:55.440 138 | 明文讀取受害者傳送的所有資料包 139 | 140 | 0:02:55.460,0:02:59.740 141 | 這意味著,我們已經成功地繞過了 WPA2 保護機制 142 | 143 | 0:03:00.620,0:03:04.000 144 | 現在,來看看受害者用 Android 存取一個網頁 145 | 146 | 0:03:04.065,0:03:06.855 147 | 還是剛才的網頁 match.com 148 | 149 | 0:03:10.520,0:03:15.360 150 | 你現在可以看到,流覽器位址欄上面已經沒有了綠色的 HTTPS 「鎖」 151 | 152 | 0:03:15.420,0:03:20.000 153 | 這意味著網頁沒有使用 HTTPS 作為額外的保護 154 | 155 | 0:03:20.460,0:03:24.260 156 | 請注意,你需要用 「sslstrip」 工具繞過 HTTPS 157 | 158 | 0:03:24.260,0:03:29.540 159 | 雖然,繞過 HTTPS 在絕大數正確配置的網頁都不起作用 160 | 161 | 0:03:29.545,0:03:32.020 162 | 但繞過 HTTPS 起到了重要意義 163 | 164 | 0:03:32.500,0:03:37.120 165 | 很多人通常不會察覺已經不再使用 HTTPS 166 | 167 | 0:03:37.120,0:03:41.180 168 | 因此受害者會繼續輸入真正的電子信箱和密碼並登入 169 | 170 | 0:03:45.100,0:03:49.720 171 | 現在攻擊者可以截獲電子信箱位址和密碼了 172 | 173 | 0:03:49.720,0:03:52.200 174 | 這只是用來演示的假帳號 175 | 176 | 0:03:52.200,0:03:54.040 177 | 所以登入失敗 178 | 179 | 0:03:54.320,0:03:58.100 180 | 然而攻擊者也能看到輸入的演示帳號密碼 181 | 182 | 0:03:58.100,0:04:01.040 183 | 現在去看看攻擊者收集到的登入嘗試 184 | 185 | 0:04:07.220,0:04:12.620 186 | 我們可以看到,攻擊者截獲了受害者的帳號和密碼 187 | 188 | 0:04:13.600,0:04:19.400 189 | 為了避免您成為 WPA2 攻擊的受害者, 190 | 請務必更新所有 Wi-Fi 裝置 191 | 192 | -------------------------------------------------------------------------------- /demovid/captions_english.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:02.590 2 | This video is based on the Key Reinstallation Attacks: 3 | 4 | 0:00:02.590,0:00:04.505 5 | Forcing Nonce Reuse in WPA2 6 | 7 | 0:00:04.505,0:00:07.435 8 | on the demonstration how weakness we discovered in WPA2 9 | 10 | 0:00:07.440,0:00:10.400 11 | can be used to attack Android and Linux devices 12 | 13 | 0:00:10.540,0:00:13.980 14 | First, I will use an Android device to connect to our Wi-Fi testnetwork 15 | 16 | 0:00:14.020,0:00:16.080 17 | which now will be the network in present 18 | 19 | 0:00:16.260,0:00:19.020 20 | Notice that the network uses WPA2 encryption 21 | 22 | 0:00:19.020,0:00:21.300 23 | as indicated by the lock symbol 24 | 25 | 0:00:21.480,0:00:24.220 26 | Additionally, on visiting, for example, match.com, 27 | 28 | 0:00:24.220,0:00:27.620 29 | Android would use HTTPS as an extra layer of protection 30 | 31 | 0:00:27.780,0:00:30.340 32 | This is indicated by the green HTTPS lock 33 | 34 | 0:00:30.340,0:00:33.780 35 | and also especially mentioned when viewing the web page info 36 | 37 | 0:00:33.780,0:00:40.600 38 | In other words, all transmitted information is securely protected using both WPA2 and HTTPS 39 | 40 | 0:00:41.320,0:00:45.140 41 | Let's now start the tools that will be used to attack Android and Linux device 42 | 43 | 0:00:45.660,0:00:49.300 44 | First, the following command is used to start a WPA2 attack script 45 | 46 | 0:00:49.380,0:00:52.960 47 | Notice that I include the protected Wi-Fi network that will be attacked 48 | 49 | 0:00:53.160,0:00:55.680 50 | on that will only target one specific device. 51 | 52 | 0:00:56.020,0:00:59.760 53 | The tools starts by searching for the protected Wi-Fi network we will attack 54 | 55 | 0:01:00.340,0:01:02.560 56 | And then we will clone this network on a different channel 57 | 58 | 0:01:02.560,0:01:07.420 59 | This malicious clone of the network enables the attacker to reliably manipulate handshake messages 60 | 61 | 0:01:07.420,0:01:10.460 62 | which is required to abuse the weakness we discovered. 63 | 64 | 0:01:11.000,0:01:15.460 65 | Second, you make sure the victim can access the internet to our malicious network 66 | 67 | 0:01:15.760,0:01:19.100 68 | Additionally, a more step of executing the sslstrip tool 69 | 70 | 0:01:19.100,0:01:24.040 71 | This tool will try to remove the additional HTTPS protection of improperly configured websites 72 | 73 | 0:01:24.780,0:01:29.420 74 | Finally, I am going to use wireshark to capture any data that the client will be transmitting 75 | 76 | 0:01:33.740,0:01:35.860 77 | You're now ready to carry out the attack 78 | 79 | 0:01:36.000,0:01:40.300 80 | So let's go to the smartphone and then connect to the WPA2-protected test network 81 | 82 | 0:01:40.700,0:01:42.295 83 | Once the victim enabled the Wi-Fi 84 | 85 | 0:01:42.295,0:01:44.535 86 | Android will search for the test network 87 | 88 | 0:01:45.960,0:01:51.600 89 | Once that it discover that network, it will try to connect to the real test network, which is not what we want 90 | 91 | 0:01:51.900,0:01:58.020 92 | Fortunately, we can solve this by sending special Wi-Fi frames that command the Android into switching to a different channel 93 | 94 | 0:01:58.260,0:02:01.920 95 | This tricks Android into connecting with the malicious cloned of the network 96 | 97 | 0:02:02.460,0:02:07.500 98 | Essentially, we now have a man in the middle position between the victim and the real Wi-Fi network 99 | 100 | 0:02:07.620,0:02:10.500 101 | This allows us to reliably manipulate the messages 102 | 103 | 0:02:10.500,0:02:13.900 104 | and carry out the key reinstallation attack against the 4-way handshake 105 | 106 | 0:02:13.980,0:02:16.380 107 | Normally, after executing such an attack 108 | 109 | 0:02:16.380,0:02:19.540 110 | the victim will reuse nonces when encrypting data frames 111 | 112 | 0:02:19.540,0:02:22.420 113 | and this allows us to recover any encrypted data 114 | 115 | 0:02:22.500,0:02:24.780 116 | However, due to the implementation bug 117 | 118 | 0:02:24.780,0:02:28.105 119 | Android and Linux will not reinstall the actual secret key 120 | 121 | 0:02:28.105,0:02:31.535 122 | Instead, they will reinstall an all-zero encryption key 123 | 124 | 0:02:31.580,0:02:34.215 125 | This makes a trial to intercept and 126 | 127 | 0:02:34.220,0:02:36.820 128 | manipulate all data that is transmitted by these devices 129 | 130 | 0:02:37.760,0:02:42.940 131 | When we now go to Wireshark, we can already see that a significant amount of data was intercepted 132 | 133 | 0:02:43.200,0:02:49.020 134 | Note that normally all these data encrypted using WPA2 and therefore isn't readable by the attacker. 135 | 136 | 0:02:49.240,0:02:52.820 137 | However, without knowing the password of this protected wifi network 138 | 139 | 0:02:52.820,0:02:55.440 140 | we can read all the packets that the victim is sending 141 | 142 | 0:02:55.460,0:02:59.740 143 | This clearly demonstrates that we have successfully bypass WPA2 144 | 145 | 0:03:00.620,0:03:04.000 146 | Let's now visit a website on the Android device of the victim 147 | 148 | 0:03:04.065,0:03:06.855 149 | And particular, you will again visit the match.com 150 | 151 | 0:03:10.520,0:03:15.360 152 | As you can now see, there is no longer a green HTTPS lock on the address bar of the browser 153 | 154 | 0:03:15.420,0:03:20.000 155 | This means the website is no longer using HTTPS as an additional layer of protection 156 | 157 | 0:03:20.460,0:03:24.260 158 | Note that you're able to bypass HTTPS using sslstrip tool 159 | 160 | 0:03:24.260,0:03:29.540 161 | although this matter of bypassing HTTPS does not working in proper configured websites 162 | 163 | 0:03:29.545,0:03:32.020 164 | it does work against a significance fraction 165 | 166 | 0:03:32.500,0:03:37.120 167 | Unfortunately, many users do not realize HTTPS is no longer used 168 | 169 | 0:03:37.120,0:03:41.180 170 | and therefore will continue to login using their real e-mail address and password 171 | 172 | 0:03:45.100,0:03:49.720 173 | The attacker is now able to intercept the e-mail address and password of the victim. 174 | 175 | 0:03:49.720,0:03:52.200 176 | Of course, this is only a demonstration using a fake account 177 | 178 | 0:03:52.200,0:03:54.040 179 | meaning the login fails 180 | 181 | 0:03:54.320,0:03:58.100 182 | Nevertheless, the attacker is able to see which password we try to use 183 | 184 | 0:03:58.100,0:04:01.040 185 | So let's go to the attacker and search for the login attempt 186 | 187 | 0:04:07.220,0:04:12.620 188 | We can see that the attacker was indeed able to intercept the username and password that the victim used 189 | 190 | 0:04:13.600,0:04:19.400 191 | To avoid being a victim of this attack against WPA2, you must update all your Wi-Fi devices 192 | 193 | -------------------------------------------------------------------------------- /demovid/captions_german.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:04.300 2 | Dieses Video basiert auf den Bericht "Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2" (CCS 2017) 3 | 4 | 0:00:04.500,0:00:07.440 5 | In dieser Demonstration wird gezeigt wie diese Lücke, die in WPA2 entdeckt wurde ... 6 | 7 | 0:00:07.440,0:00:10.400 8 | ... verwendet werden kann um Android und Linux Geräte zu attackieren. 9 | 10 | 0:00:10.540,0:00:13.980 11 | Zuerst werde ich ein Android-Gerät verwenden, um eine Wi-Fi Verbindung mit unserem "testnetwork" herzustellen. 12 | 13 | 0:00:14.020,0:00:16.080 14 | Zurzeit wird die Sicherheitslücke noch nicht ausgenutzt. 15 | 16 | 0:00:16.260,0:00:19.020 17 | Beachten Sie, dass das Netzwerk WPA2-Verschlüsselung verwendet 18 | 19 | 0:00:19.020,0:00:21.300 20 | Dies wird durch das Schloss-Symbol angedeutet 21 | 22 | 0:00:21.480,0:00:24.220 23 | Wenn wir nun zum Beispiel match.com besuchen ... 24 | 25 | 0:00:24.220,0:00:27.620 26 | ... sehen wir, dass Android HTTPS als zusätzliche Schutzschicht verwendet 27 | 28 | 0:00:27.780,0:00:30.340 29 | Dies wird durch das grüne HTTPS-Schloss bestätigt ... 30 | 31 | 0:00:30.340,0:00:33.780 32 | ... und wird zusätzlich in der Seiten-Info erwähnt. 33 | 34 | 0:00:33.780,0:00:40.600 35 | Mit anderen Worten sind alle übertragenen Daten durch WPA2 und zusätzlich HTTPS geschützt. 36 | 37 | 0:00:41.320,0:00:45.140 38 | Starten wir nun die Tools, die wir verwenden werden, um Android und Linux Geräte zu attackieren. 39 | 40 | 0:00:45.660,0:00:49.300 41 | Zunächst wird der folgende Befehl verwendet, um den WPA2 Angriff-Skript zu starten 42 | 43 | 0:00:49.380,0:00:52.960 44 | Im Befehl wird das geschütze Wi-Fi Netwerk angegeben, welches attackiert werden sollte. 45 | 46 | 0:00:53.160,0:00:55.680 47 | In diesem Netzwerk wird nur ein spezifisches Gerät überwacht. 48 | 49 | 0:00:56.020,0:00:59.760 50 | Beim Start wird das Tool zuerst das gesicherte Wi-Fi Netzwerk suchen, welches wir attackieren wollen. 51 | 52 | 0:01:00.340,0:01:02.560 53 | Danach werden wir dieses Netzwerk auf einem anderen Kanal klonen. 54 | 55 | 0:01:02.560,0:01:07.420 56 | Dieser bösartige Klon des Wi-Fi Netzwerk ermöglicht es den Angreifer zuverlässig Handshake-Nachrichten zu manipulieren. 57 | 58 | 0:01:07.420,0:01:10.460 59 | Dies ist erforderlich, um die Sicherheitslücke auszunutzen. 60 | 61 | 0:01:11.000,0:01:15.460 62 | Nun stellen Sie sicher, dass das Opfer über unser bösartiges Wi-Fi Netzwerk Zugriff auf das Internet hat. 63 | 64 | 0:01:15.760,0:01:19.100 65 | Zusätzlich wird nun das sslstrip-Tool ausgeführt. 66 | 67 | 0:01:19.100,0:01:24.040 68 | Dieses Tool wird versuchen, den zusätzlichen HTTPS Schutz von nicht ordnungsgemäß konfigurierten Websites zu entfernen. 69 | 70 | 0:01:24.780,0:01:29.420 71 | Nun werde ich Wireshark verwenden, um alle Daten die der Client überträgt zu erfassen. 72 | 73 | 0:01:33.740,0:01:35.860 74 | Sie sind nun bereit, den Angriff durchzuführen 75 | 76 | 0:01:36.000,0:01:40.300 77 | Lass uns nun das Smartphone mit dem WPA2 geschützten Wi-Fi Netzwerk "testnetwork" verbinden. 78 | 79 | 0:01:40.700,0:01:42.295 80 | Sobald das Opfer Wi-Fi aktiviert ... 81 | 82 | 0:01:42.295,0:01:44.535 83 | ... wird Android nach dem "testnetwork" suchen. 84 | 85 | 0:01:45.960,0:01:51.600 86 | Sobald es dieses Netzwerk entdeckt, wird es versuchen mit dem realen "testnetwork" zu verbinden. Das ist nicht was wir wollen. 87 | 88 | 0:01:51.900,0:01:58.020 89 | Zum Glück können wir dies durch das Senden spezieller Wi-Fi-Frames lösen. Diese befehlen dem Android Gerät zu einem anderen Kanal zu wechseln. 90 | 91 | 0:01:58.260,0:02:01.920 92 | Dieser Trick bringt das Android-Gerät dazu, sich zum bösen Klon des Wi-Fi Netzwerks zu verbinden. 93 | 94 | 0:02:02.460,0:02:07.500 95 | Im Wesentlichen haben wir jetzt eine "Man-in-the-middle"-Position zwischen dem Opfer und dem realen Wi-Fi-Netzwerk. 96 | 97 | 0:02:07.620,0:02:10.500 98 | Dies ermöglicht es uns die Nachrichten zuverlässig zu manipulieren ... 99 | 100 | 0:02:10.500,0:02:13.900 101 | ... und die "Key reinstallation attack" (KRACK) gegen den 4-Wege-Handshake auszuführen. 102 | 103 | 0:02:13.980,0:02:16.380 104 | Normalerweise wird nach der Ausführung eines solchen Angriffs ... 105 | 106 | 0:02:16.380,0:02:19.540 107 | ... das Opfer "Nonces" wiederverwenden um Daten-Frames zu verschlüsseln. 108 | 109 | 0:02:19.540,0:02:22.420 110 | Dies ermöglicht es uns, alle verschlüsselten Daten wiederherzustellen. 111 | 112 | 0:02:22.500,0:02:24.780 113 | Jedoch aufgrund eines implementierungs Fehler ... 114 | 115 | 0:02:24.780,0:02:28.105 116 | bei Android und Linux werden die tatsächlichen geheimen Schlüssel nicht neu installiert. 117 | 118 | 0:02:28.105,0:02:31.535 119 | Stattdessen werden sie einen "all-zero"-Verschlüsselungsschlüssel installieren. 120 | 121 | 0:02:31.580,0:02:36.820 122 | Dies macht den Versuch alle Daten des Gerätes abzufangen und zu manipulieren recht einfach. 123 | 124 | 0:02:37.760,0:02:42.940 125 | Wenn wir jetzt zu Wireshark gehen, können wir sehen, dass eine erhebliche Menge an Daten abgefangen wurde. 126 | 127 | 0:02:43.200,0:02:49.020 128 | Beachten Sie, dass normalerweise alle diese Daten mittels WPA2 verschlüsselt und somit unlesbar für den Angreifer wären. 129 | 130 | 0:02:49.240,0:02:52.820 131 | Wir können nun jedoch ohne das Passwort von diesem geschützen Wi-Fi Netzwerk zu wissen ... 132 | 133 | 0:02:52.820,0:02:55.440 134 | ... alle Pakete lesen, die das Opfer sendet. 135 | 136 | 0:02:55.460,0:02:59.740 137 | Dies zeigt deutlich auf, dass wir erfolgreich WPA2 umgangen sind. 138 | 139 | 0:03:00.620,0:03:04.000 140 | Lass uns jetzt eine Website auf dem Android-Gerät des Opfers besuchen 141 | 142 | 0:03:04.065,0:03:06.855 143 | Wir werden wieder match.com besuchen. 144 | 145 | 0:03:10.520,0:03:15.360 146 | Wie Sie jetzt sehen können, ist nun kein grünes HTTPS-Schloss mehr auf der Adressleiste des Browsers ersichtlich. 147 | 148 | 0:03:15.420,0:03:20.000 149 | Dies bedeutet, dass die Webseite nun HTTPS nicht mehr als zusätzliche Schutzschicht verwendet. 150 | 151 | 0:03:20.460,0:03:24.260 152 | Durch das sslstrip-Tool sind wir HTTPS umgangen. 153 | 154 | 0:03:24.260,0:03:29.540 155 | Ist eine HTTPS geschützte Webseite richtig konfiguriert, kann der zusätzliche Schutz nicht umgangen werden. 156 | 157 | 0:03:29.545,0:03:32.020 158 | Trotzdem funktioniert es für eine signifikante Anzahl von Webseiten. 159 | 160 | 0:03:32.500,0:03:37.120 161 | Leider erkennen viele Benutzer nicht, dass HTTPS nicht mehr verwendet wird ... 162 | 163 | 0:03:37.120,0:03:41.180 164 | ... und deshalb melden diese sich mit ihren echten E-Mail-Adressen und Passwörter an. 165 | 166 | 0:03:45.100,0:03:49.720 167 | Der Angreifer ist nun in der Lage, die E-Mail-Adresse und das Passwort des Opfers abzufangen. 168 | 169 | 0:03:49.720,0:03:52.200 170 | Natürlich ist dies nur eine Demonstration. Hier wird ein gefälschte Konto verwendet. 171 | 172 | 0:03:52.200,0:03:54.040 173 | Dies sehen wir, da das Anmelden fehlschlägt. 174 | 175 | 0:03:54.320,0:03:58.100 176 | Dennoch ist der Angreifer in der Lage zu sehen, welches Passwort wir versuchen haben zu verwenden. 177 | 178 | 0:03:58.100,0:04:01.040 179 | Lassen uns also zum Angreifer wechseln und den Login-Versuch suchen. 180 | 181 | 0:04:07.220,0:04:12.620 182 | Wir können sehen, dass der Angreifer tatsächlich in der Lage ist, den Benutzernamen und das Passwort abzufangen. 183 | 184 | 0:04:13.600,0:04:19.400 185 | !!! Um zu verhindern, dass Sie ein Opfer von dieser Attacke gegen WPA2 werden, müssen sie alle ihre Wi-Fi fähige Geräte updaten. !!! 186 | 187 | 0:04:19.680,0:04:25.340 188 | Übersetzt von Zyranus 189 | 190 | -------------------------------------------------------------------------------- /demovid/captions_japanese.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:04.660 2 | このビデオは論文 3 | 「鍵の再インストール攻撃: ノンス再利用の強制」に 4 | 準拠しています。 5 | 6 | 0:00:04.700,0:00:10.560 7 | このデモ上の私たちが発見したWPA2の弱点は、 8 | LinuxとAndroid端末を攻撃することができます。 9 | 10 | 0:00:10.560,0:00:15.740 11 | まず、Android 端末を使用して 12 | 私たちの Wi-Fi テストネットワークに接続します。 13 | 14 | 0:00:15.740,0:00:20.720 15 | このネットワークが鍵のシンボルに示されるようにWPA2暗号化を使用していることに注目してください。 16 | 17 | 0:00:20.740,0:00:24.280 18 | 次に、例えば、match.comを訪問します。 19 | 20 | 0:00:24.320,0:00:33.580 21 | Android は、 22 | 追加の保護レイヤーとしてHTTPSを使用します。 23 | これは緑のHTTPSロックで示され、Webページの情報を表示すると確認することができます。 24 | 25 | 0:00:33.780,0:00:40.600 26 | 言い換えると、すべての送信された情報は確実にWPA2とHTTPSの両方を使用して保護されています。 27 | 28 | 0:00:41.320,0:00:45.140 29 | さて、Android 端末と Linux を攻撃するためのツールを起動してみましょう。 30 | 31 | 0:00:45.660,0:00:49.300 32 | まず、このコマンドは、WPA2攻撃スクリプトを 33 | 開始するために使用されます。 34 | 35 | 0:00:49.380,0:00:55.720 36 | このコマンドには攻撃対象となる 37 | 「保護されたWi-Fiネットワーク名」が含まれること、 38 | また特定のデバイスのみを対象としていることに 39 | 注目してください。 40 | 41 | 0:00:56.020,0:01:02.220 42 | このツールは、攻撃を受ける 43 | 「保護されたWi-Fiネットワーク」を 44 | 探すことから始め、このネットワークを 45 | 別のチャネルでクローンします。 46 | 47 | 0:01:02.560,0:01:10.780 48 | この不正なクローンネットワークは、攻撃者が、 49 | 私たちが発見した弱点を悪用するのに必要な 50 | 「ハンドシェイクメッセージを確実に操作すること」を 51 | 可能にします。 52 | 53 | 0:01:11.000,0:01:15.460 54 | 次に、犠牲者がこの不正なネットワークを通して 55 | インターネットにアクセスできること確認します。 56 | 57 | 0:01:15.760,0:01:24.400 58 | さらに、いくつかのステップで 59 | 「sslstrip」ツールを実行します。 60 | このツールは、不適切に設定されたWebサイトの 61 | 「追加のHTTPS保護」の削除を試みます。 62 | 63 | 0:01:24.780,0:01:29.840 64 | 最後に、「Wireshark」を使用して、このクライアントが送信するすべてのデータを取得します。 65 | 66 | 0:01:33.740,0:01:35.860 67 | これで、攻撃を実施する準備ができました。 68 | 69 | 0:01:36.000,0:01:40.300 70 | それでは、スマートフォンに移って、 71 | WPA2 で保護されたテストネットワークに 72 | 接続してみましょう。 73 | 74 | 0:01:40.700,0:01:45.140 75 | 犠牲者が Wi-Fi を有効にすると、 76 | Android はテストネットワークを探します。 77 | 78 | 0:01:45.600,0:01:51.600 79 | そのネットワークを発見すると、 80 | 実際のテストネットワークに接続しようとします。 81 | これは私たち(攻撃者)が望んでいないことです。 82 | 83 | 0:01:51.900,0:01:58.020 84 | 幸いなことに私たちは、この Android を 85 | 別のチャンネルに切り替えるように指示する 86 | 「特別な Wi-Fi フレーム」を送信することで、 87 | これを解決できます。 88 | 89 | 0:01:58.260,0:02:01.920 90 | これは不正なクローンネットワークに接続するように Android を騙します。 91 | 92 | 0:02:02.460,0:02:07.500 93 | 実質、私たちは犠牲者と本当の Wi-Fi ネットワーク の間の「Man in The Middle(中間者)」ポジションにいる、 94 | ということです。 95 | 96 | 0:02:07.620,0:02:13.940 97 | このことは私たちに 98 | 確実なメッセージの操作をもたらし、 99 | 4ウェイハンドシェイクに対する 100 | 「キー再インストール攻撃」を実行可能にします。 101 | 102 | 0:02:13.980,0:02:22.200 103 | 通常であれば、この攻撃のあとは、 104 | 犠牲者はデータフレームを暗号化するときに 105 | ノンスを再利用することになり、 106 | 攻撃者に暗号化されたデータを復元することを 107 | 許します。 108 | 109 | 0:02:22.500,0:02:31.580 110 | しかし、実装のバグによって、Android と Linux は実際の秘密鍵を再インストールしません。かわりに、「すべてがゼロの暗号化キー」を再インストールするのです。 111 | 112 | 0:02:31.580,0:02:37.080 113 | これは、これらのデバイスによって送信される 114 | すべてのデータを傍受・操作することを 115 | さらに簡単にします。 116 | 117 | 0:02:37.760,0:02:42.940 118 | さて、「Wireshark」を見ると、すでにかなりの量の 119 | データが傍受されていることがわかります。 120 | 121 | 0:02:43.200,0:02:49.020 122 | ここでは、通常ならばこれらのデータは 123 | すべてWPA2を使用して暗号化されているため、 124 | 攻撃者が読み取ることはできないということに 125 | 留意してください。 126 | 127 | 0:02:49.240,0:02:55.200 128 | しかし、この保護された Wi-Fi ネットワークのパスワードを知らなくても、犠牲者が送信しているすべての 129 | パケットを読み取ることができるのです。 130 | 131 | 0:02:55.460,0:02:59.740 132 | これは私たちが WPA2 のバイパスに成功したことを 133 | 明確に示しています。 134 | 135 | 0:03:00.620,0:03:04.000 136 | 今度は犠牲者の Android 端末で 137 | ウェブサイトにアクセスしてみましょう。 138 | 139 | 0:03:04.060,0:03:07.000 140 | ここでは、 match.com を再訪します。 141 | 142 | 0:03:10.520,0:03:15.360 143 | あなたが今見ているように、 144 | ブラウザのアドレスバーにはもはや 145 | 緑のHTTPSロックはありません。 146 | 147 | 0:03:15.420,0:03:20.000 148 | これは、このウェブサイトがもはや 149 | 追加の保護レイヤーとしてHTTPSを使用しない 150 | ことを意味します。 151 | 152 | 0:03:20.460,0:03:24.260 153 | ここでは、「sslstrip」ツールを使用してHTTPSのバイパスを可能にしている点に留意してください。 154 | 155 | 0:03:24.260,0:03:32.200 156 | このHTTPSをバイパスする問題は、適切に構成されたウェブサイトに対しては有効ではないのですが、有効に発動させることができるところは数多くあります。 157 | 158 | 0:03:32.500,0:03:37.120 159 | 残念ながら、多くのユーザーは 160 | HTTPSが使われなくなったことに気が付きません。 161 | 162 | 0:03:37.120,0:03:41.660 163 | したがって、彼らは本当の 164 | メールアドレスとパスワードを使って 165 | ログインを行います。 166 | 167 | 0:03:45.100,0:03:49.720 168 | 攻撃者はここで、 169 | 犠牲者のメールアドレスとパスワードを 170 | 傍受することができます。 171 | 172 | 0:03:49.720,0:03:53.880 173 | もちろんこれはデモなので、 174 | ログイン失敗が意味する通り、 175 | フェイクのアカウントを使っています。 176 | 177 | 0:03:54.320,0:03:58.100 178 | とはいえ、攻撃者は犠牲者が 179 | 使用しようとするパスワードを知ることができます。 180 | 181 | 0:03:58.100,0:04:01.040 182 | それでは、攻撃者になって、 183 | ログインを試してみましょう。 184 | 185 | 0:04:07.220,0:04:12.760 186 | 攻撃者が、犠牲者が使用したユーザー名とパスワードを 187 | 実際に傍受できたことがわかります。 188 | 189 | 0:04:13.600,0:04:19.400 190 | このWPA2に対する攻撃の犠牲者にならないためには、 191 | あなたの全てのWi-Fi機器をアップデートする 192 | 必要があります。 193 | 194 | -------------------------------------------------------------------------------- /demovid/captions_portuguese_brazil.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:02.590 2 | Este vídeo é baseado nos ataques reinstalação chave: 3 | 4 | 0:00:02.590,0:00:04.505 5 | Forçando Nonce Reutilização em WPA2 6 | 7 | 0:00:04.505,0:00:07.435 8 | na demonstração de como fraqueza descobrimos em WPA2 9 | 10 | 0:00:07.440,0:00:10.400 11 | pode ser usado para atacar Android e Linux dispositivos 12 | 13 | 0:00:10.540,0:00:13.980 14 | Primeiro, vou usar um dispositivo Android para se conectar ao nosso testnetwork Wi-Fi 15 | 16 | 0:00:14.020,0:00:16.080 17 | que agora vai ser a rede na presente 18 | 19 | 0:00:16.260,0:00:19.020 20 | Observe que a rede usa criptografia WPA2 21 | 22 | 0:00:19.020,0:00:21.300 23 | como indicado por meio do símbolo de bloqueio 24 | 25 | 0:00:21.480,0:00:24.220 26 | Além disso, na visita, por exemplo, match.com, 27 | 28 | 0:00:24.220,0:00:27.620 29 | Android usaria HTTPS como uma camada extra de proteção 30 | 31 | 0:00:27.780,0:00:30.340 32 | Isto é indicado pelo bloqueio HTTPS verde 33 | 34 | 0:00:30.340,0:00:33.780 35 | e também especialmente mencionados ao visualizar a informação página web 36 | 37 | 0:00:33.780,0:00:40.600 38 | Em outras palavras, toda a informação transmitida está bem protegida usando WPA2 e HTTPS 39 | 40 | 0:00:41.320,0:00:45.140 41 | Vamos agora iniciar as ferramentas que serão usadas para atacar Android e Linux dispositivo 42 | 43 | 0:00:45.660,0:00:49.300 44 | Primeiro, o seguinte comando é usado para iniciar um script ataque WPA2 45 | 46 | 0:00:49.380,0:00:52.960 47 | Observe que eu incluem a rede Wi-Fi protegida que será atacado 48 | 49 | 0:00:53.160,0:00:55.680 50 | em que só terá como alvo um dispositivo específico. 51 | 52 | 0:00:56.020,0:00:59.760 53 | As ferramentas começa a procurar a rede Wi-Fi protegida vamos atacar 54 | 55 | 0:01:00.340,0:01:02.560 56 | E então vamos clonar esta rede em um canal diferente 57 | 58 | 0:01:02.560,0:01:07.420 59 | Este clone malicioso da rede permite que o invasor para manipular de forma confiável mensagens handshake 60 | 61 | 0:01:07.420,0:01:10.460 62 | que é necessário para abusar da fraqueza descobrimos. 63 | 64 | 0:01:11.000,0:01:15.460 65 | Em segundo lugar, você se certificar de que a vítima pode acessar a internet à nossa rede malicioso 66 | 67 | 0:01:15.760,0:01:19.100 68 | Além disso, um mais passo de executar a ferramenta sslstrip 69 | 70 | 0:01:19.100,0:01:24.040 71 | Esta ferramenta irá tentar remover a proteção de HTTPS adicional de sites indevidamente configurados 72 | 73 | 0:01:24.780,0:01:29.420 74 | Finalmente, eu vou usar o Wireshark para capturar todos os dados que o cliente estará transmitindo 75 | 76 | 0:01:33.740,0:01:35.860 77 | Agora você está pronto para levar a cabo o ataque 78 | 79 | 0:01:36.000,0:01:40.300 80 | Então vamos para o smartphone e, em seguida, conectar-se à rede de teste protegido por WPA2 81 | 82 | 0:01:40.700,0:01:42.295 83 | Uma vez que a vítima permitiu que o Wi-Fi 84 | 85 | 0:01:42.295,0:01:44.535 86 | Android irá procurar a rede de teste 87 | 88 | 0:01:45.960,0:01:51.600 89 | Uma vez que ele descobrir que a rede, ele vai tentar se conectar à rede teste real, que não é o que queremos 90 | 91 | 0:01:51.900,0:01:58.020 92 | Felizmente, podemos resolver isso enviando quadros Wi-Fi especiais que comandam o Android em mudar para um canal diferente 93 | 94 | 0:01:58.260,0:02:01.920 95 | Isso engana Android em conexão com o malicioso clonado da rede 96 | 97 | 0:02:02.460,0:02:07.500 98 | Essencialmente, nós temos agora um homem na posição intermediária entre a vítima e a rede Wi-Fi reais 99 | 100 | 0:02:07.620,0:02:10.500 101 | Isso nos permite manipular de forma confiável as mensagens 102 | 103 | 0:02:10.500,0:02:13.900 104 | e realizar o ataque chave reinstalação contra o 4-handshake 105 | 106 | 0:02:13.980,0:02:16.380 107 | Normalmente, após a execução de um tal ataque 108 | 109 | 0:02:16.380,0:02:19.540 110 | a vítima vai reutilizar nonces ao criptografar quadros de dados 111 | 112 | 0:02:19.540,0:02:22.420 113 | e isso nos permite recuperar todos os dados criptografados 114 | 115 | 0:02:22.500,0:02:24.780 116 | No entanto, devido ao bug implementação 117 | 118 | 0:02:24.780,0:02:28.105 119 | Android e Linux não irá reinstalar a chave secreta real 120 | 121 | 0:02:28.105,0:02:31.535 122 | Em vez disso, eles vão reinstalar uma chave de criptografia tudo de zero 123 | 124 | 0:02:31.580,0:02:34.215 125 | Isso faz com que um julgamento para interceptar e 126 | 127 | 0:02:34.220,0:02:36.820 128 | manipular todos os dados que são transmitidos por estes dispositivos 129 | 130 | 0:02:37.760,0:02:42.940 131 | Quando nós agora ir para Wireshark, já podemos ver que uma quantidade significativa de dados foi interceptado 132 | 133 | 0:02:43.200,0:02:49.020 134 | Note-se que, normalmente, todos esses dados criptografados usando WPA2 e, portanto, não é legível pelo atacante. 135 | 136 | 0:02:49.240,0:02:52.820 137 | No entanto, sem saber a senha da rede Wi-Fi protegida 138 | 139 | 0:02:52.820,0:02:55.440 140 | podemos ler todos os pacotes que a vítima está enviando 141 | 142 | 0:02:55.460,0:02:59.740 143 | Isto demonstra claramente que temos contornar com sucesso WPA2 144 | 145 | 0:03:00.620,0:03:04.000 146 | Vamos agora visitar um site no dispositivo Android da vítima 147 | 148 | 0:03:04.065,0:03:06.855 149 | E particular, você vai voltar a visitar o match.com 150 | 151 | 0:03:10.520,0:03:15.360 152 | Como você pode ver agora, não há mais um bloqueio HTTPS verde na barra de endereço do navegador 153 | 154 | 0:03:15.420,0:03:20.000 155 | Isso significa que o site não está mais usando HTTPS como uma camada adicional de proteção 156 | 157 | 0:03:20.460,0:03:24.260 158 | Note-se que você é capaz de ignorar HTTPS usando a ferramenta sslstrip 159 | 160 | 0:03:24.260,0:03:29.540 161 | embora esta questão de HTTPS ignorando não trabalhando em sites configurados apropriados 162 | 163 | 0:03:29.545,0:03:32.020 164 | ela não funciona contra uma fração significado 165 | 166 | 0:03:32.500,0:03:37.120 167 | Infelizmente, muitos usuários não percebem HTTPS não é mais usado 168 | 169 | 0:03:37.120,0:03:41.180 170 | e, portanto, vai continuar a fazer login usando seu endereço real de e-mail e senha 171 | 172 | 0:03:45.100,0:03:49.720 173 | O atacante agora é capaz de interceptar o endereço de e-mail e senha da vítima. 174 | 175 | 0:03:49.720,0:03:52.200 176 | Claro, esta é apenas uma demonstração usando uma conta falsa 177 | 178 | 0:03:52.200,0:03:54.040 179 | ou seja, o login falha 180 | 181 | 0:03:54.320,0:03:58.100 182 | No entanto, o atacante é capaz de ver quais senha tentamos usar 183 | 184 | 0:03:58.100,0:04:01.040 185 | Então vamos para o atacante e procurar a tentativa de login 186 | 187 | 0:04:07.220,0:04:12.620 188 | Podemos ver que o atacante era de fato capaz de interceptar o nome de usuário e senha que a vítima usado 189 | 190 | 0:04:13.600,0:04:19.400 191 | Para evitar ser vítima deste ataque contra WPA2, você deve atualizar todos os seus dispositivos Wi-Fi 192 | 193 | -------------------------------------------------------------------------------- /demovid/captions_russian.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:02.590 2 | Это видео сделано на основе доклада Key Reinstallation Attacks: 3 | 4 | 0:00:02.590,0:00:04.505 5 | Forcing Nonce Reuse in WPA2 6 | 7 | 0:00:04.505,0:00:07.435 8 | и показывает, как найденные нами в протоколе WPA2 уязвимости 9 | 10 | 0:00:07.440,0:00:10.400 11 | могут быть использованы для атаки на устройства под Android и Linux 12 | 13 | 0:00:10.540,0:00:13.980 14 | Сначала, я подключусь к тестовой Wi-Fi-сети с устройства под управлением Android, 15 | 16 | 0:00:14.020,0:00:16.080 17 | которая еще не была взломана. 18 | 19 | 0:00:16.260,0:00:19.020 20 | Заметьте, эта сеть использует шифрование WPA2 21 | 22 | 0:00:19.020,0:00:21.300 23 | о чем говорит маленькая иконка замка. 24 | 25 | 0:00:21.480,0:00:24.220 26 | Кроме того, при выходе в интернет, например, на сайт знакомств match.com 27 | 28 | 0:00:24.220,0:00:27.620 29 | Android использует протокол HTTPS как дополнительный уровень защиты. 30 | 31 | 0:00:27.780,0:00:30.340 32 | Об этом говорит зеленая иконка с замком. 33 | 34 | 0:00:30.340,0:00:33.780 35 | А также явно написано, если посмотреть свойства страницы. 36 | 37 | 0:00:33.780,0:00:40.600 38 | Короче, вся передаваемая информация надежно защищена как при помощи WPA2, так и HTTPS. 39 | 40 | 0:00:41.320,0:00:45.140 41 | Теперь давайте запустим средства для взлома наших устройств под Android и Linux. 42 | 43 | 0:00:45.660,0:00:49.300 44 | Сначала, данная команда запускает скрипт атаки на WPA2 45 | 46 | 0:00:49.380,0:00:52.960 47 | Обратите внимание на параметр --target, который указывает ту сеть, которую мы хотим взломать 48 | 49 | 0:00:53.160,0:00:55.680 50 | поскольку в целях демонстрации я нацеливаюсь только на определенное устройство. 51 | 52 | 0:00:56.020,0:00:59.760 53 | Скрипт сначала запускает поиск указанной сети, 54 | 55 | 0:01:00.340,0:01:02.560 56 | затем ретранслирует ее на другом канале. 57 | 58 | 0:01:02.560,0:01:07.420 59 | Эта вторая копия сети позволяет хакеру надежно подделать пакеты инициализации соединения (handshake) 60 | 61 | 0:01:07.420,0:01:10.460 62 | что необходимо для найденного нами способа взлома. 63 | 64 | 0:01:11.000,0:01:15.460 65 | Далее, убедитесь, что жертва все еще может войти в интернет через нашу поддельную сеть. 66 | 67 | 0:01:15.760,0:01:19.100 68 | Кроме этого, я запускаю sslstrip-утилиту, 69 | 70 | 0:01:19.100,0:01:24.040 71 | которая пытается снять дополнительную HTTPS-защиту на многих неправильно сконфигурированных сайтах. 72 | 73 | 0:01:24.780,0:01:29.420 74 | Наконец, я использую программу WireShark для перехвата любой информации, передаваемой жертвой. 75 | 76 | 0:01:33.740,0:01:35.860 77 | Мы готовы начинать атаку. 78 | 79 | 0:01:36.000,0:01:40.300 80 | Берем наш смартфон, и снова подключаемся к той же тестовой Wi-Fi сети с защитой по WPA2. 81 | 82 | 0:01:40.700,0:01:42.295 83 | Как только жертва включила Wi-Fi 84 | 85 | 0:01:42.295,0:01:44.535 86 | Android начинает искать сеть. 87 | 88 | 0:01:45.960,0:01:51.600 89 | Как только он ее найдет, он попытается подключиться к настоящей сети, - что нас не устраивает. 90 | 91 | 0:01:51.900,0:01:58.020 92 | К счастью, существуют специальные Wi-Fi коды, которые подают ему команду перейти на другой канал. 93 | 94 | 0:01:58.260,0:02:01.920 95 | Так Android найдет и подключится к нашей поддельной сети. 96 | 97 | 0:02:02.460,0:02:07.500 98 | Таким образом, мы провели 'атаку посредника' (MitM), и находимся между жертвой и реальной Wi-Fi сетью. 99 | 100 | 0:02:07.620,0:02:10.500 101 | Это позволяет нам надежно контролировать сообщения 102 | 103 | 0:02:10.500,0:02:13.900 104 | и совершить атаку 'реинсталляции ключа' (KRACK) на четверном квитировании (4-way handshake). 105 | 106 | 0:02:13.980,0:02:16.380 107 | Обычно, после этой атаки 108 | 109 | 0:02:16.380,0:02:19.540 110 | ОС жертвы будет повторно использовать один и тот же одноразовый nonce-код при шифровании пакетов данных, 111 | 112 | 0:02:19.540,0:02:22.420 113 | что позволяет ей не потерять уже полученные данные. 114 | 115 | 0:02:22.500,0:02:24.780 116 | Однако, из-за бага в реализации протокола 117 | 118 | 0:02:24.780,0:02:28.105 119 | Android и Linux возьмут не реальный ключ шифрования, 120 | 121 | 0:02:28.105,0:02:31.535 122 | а заменят его нулями! 123 | 124 | 0:02:31.580,0:02:34.215 125 | Благодаря этому перехватить или 126 | 127 | 0:02:34.220,0:02:36.820 128 | подменить все передаваемые этими устройствами данные становится очень легко. 129 | 130 | 0:02:37.760,0:02:42.940 131 | Мы видим через WireShark, сколько полезной информации на данный момент уже перехвачено. 132 | 133 | 0:02:43.200,0:02:49.020 134 | В норме, естественно, вся эта информация зашифрована WPA2 и прочесть ее невозможно. 135 | 136 | 0:02:49.240,0:02:52.820 137 | Но при помощи данных средств, я могу читать все данные жертвы 138 | 139 | 0:02:52.820,0:02:55.440 140 | абсолютно не зная пароля от его Wi-Fi. 141 | 142 | 0:02:55.460,0:02:59.740 143 | Это наглядно демонстрирует, что мы обошли защиту WPA2. 144 | 145 | 0:03:00.620,0:03:04.000 146 | Давайте теперь зайдем в интернет с устройства жертвы. 147 | 148 | 0:03:04.065,0:03:06.855 149 | Например, опять зайдем на сайт знакомств match.com 150 | 151 | 0:03:10.520,0:03:15.360 152 | Как видите, в адресной строке браузера теперь нет зеленого замка. 153 | 154 | 0:03:15.420,0:03:20.000 155 | Это значит, что данный сайт больше не использует протокол HTTPS в качестве дополнительной защиты. 156 | 157 | 0:03:20.460,0:03:24.260 158 | Обратите внимание, что обойти HTTPS можно при помощи sslstrip. 159 | 160 | 0:03:24.260,0:03:29.540 161 | Хотя при правильной настройке сервера она не поможет. 162 | 163 | 0:03:29.545,0:03:32.020 164 | Но на большинстве сайтов работает. 165 | 166 | 0:03:32.500,0:03:37.120 167 | К сожалению, многие пользователи никогда не смотрят на значок замка 168 | 169 | 0:03:37.120,0:03:41.180 170 | и сразу введут свой логин и пароль. 171 | 172 | 0:03:45.100,0:03:49.720 173 | Хакер теперь спокойно может перехватывать учетные данные жертв. 174 | 175 | 0:03:49.720,0:03:52.200 176 | Естественно, я показываю это на фейковом аккаунте, 177 | 178 | 0:03:52.200,0:03:54.040 179 | поэтому войти не получается. 180 | 181 | 0:03:54.320,0:03:58.100 182 | Тем не менее, хакеру видны все ваши введенные пароли. 183 | 184 | 0:03:58.100,0:04:01.040 185 | Перейдем в WireShark и поищем следы входа на сайт. 186 | 187 | 0:04:07.220,0:04:12.620 188 | Мы видим перехваченные логин и пароль нашей 'жертвы'. 189 | 190 | 0:04:13.600,0:04:19.400 191 | Чтобы защитить свой Wi-Fi от этой атаки, вам нужно пропатчить все свои беспроводные устройства. 192 | 193 | -------------------------------------------------------------------------------- /demovid/captions_spanish.sbv: -------------------------------------------------------------------------------- 1 | 0:00:00.000,0:00:02.590 2 | Este vídeo se basa en los ataques de re instalación clave: 3 | 4 | 0:00:02.590,0:00:04.505 5 | Forzando Nonce reutilización en WPA2 6 | 7 | 0:00:04.505,0:00:07.435 8 | en la demostración de cómo la debilidad que hemos descubierto en WPA2 9 | 10 | 0:00:07.440,0:00:10.400 11 | puede ser utilizado para atacar a los dispositivos Android y Linux 12 | 13 | 0:00:10.540,0:00:13.980 14 | En primer lugar, voy a utilizar un dispositivo Android para conectarse a nuestra testnetwork Wi-Fi 15 | 16 | 0:00:14.020,0:00:16.080 17 | que ahora será la red en presente 18 | 19 | 0:00:16.260,0:00:19.020 20 | Observe que la red utiliza el cifrado WPA2 21 | 22 | 0:00:19.020,0:00:21.300 23 | como se indica por el símbolo de bloqueo 24 | 25 | 0:00:21.480,0:00:24.220 26 | Además, al visitar, por ejemplo, match.com, 27 | 28 | 0:00:24.220,0:00:27.620 29 | Android podría utilizar HTTPS como una capa adicional de protección 30 | 31 | 0:00:27.780,0:00:30.340 32 | Esto se indica mediante el bloqueo de HTTPS verde 33 | 34 | 0:00:30.340,0:00:33.780 35 | y también se menciona en especial cuando se ve la información de la página web 36 | 37 | 0:00:33.780,0:00:40.600 38 | En otras palabras, toda la información transmitida está protegida de forma segura utilizando el WPA2 y HTTPS 39 | 40 | 0:00:41.320,0:00:45.140 41 | Ahora vamos a empezar las herramientas que se utilizan para atacar a Android y Linux dispositivo 42 | 43 | 0:00:45.660,0:00:49.300 44 | En primer lugar, el siguiente comando se utiliza para iniciar una secuencia de comandos de ataque WPA2 45 | 46 | 0:00:49.380,0:00:52.960 47 | Tenga en cuenta que incluyo la red Wi-Fi protegido que será atacado 48 | 49 | 0:00:53.160,0:00:55.680 50 | en la que sólo se dirigirá a un dispositivo específico. 51 | 52 | 0:00:56.020,0:00:59.760 53 | Las herramientas se inicia mediante la búsqueda de la red Wi-Fi Protected atacaremos 54 | 55 | 0:01:00.340,0:01:02.560 56 | Y luego vamos a clonar esta red en un canal diferente 57 | 58 | 0:01:02.560,0:01:07.420 59 | Este clon malicioso de la red permite al atacante para manipular de forma fiable mensajes de reconocimiento 60 | 61 | 0:01:07.420,0:01:10.460 62 | que se requiere para abusar de la debilidad que hemos descubierto. 63 | 64 | 0:01:11.000,0:01:15.460 65 | En segundo lugar, se asegura de que la víctima puede acceder a Internet a nuestra red maliciosa 66 | 67 | 0:01:15.760,0:01:19.100 68 | Además, un paso más de la ejecución de la herramienta sslstrip 69 | 70 | 0:01:19.100,0:01:24.040 71 | Esta herramienta va a tratar de quitar la protección HTTPS adicional de sitios web configurados incorrectamente 72 | 73 | 0:01:24.780,0:01:29.420 74 | Por último, voy a utilizar Wireshark para capturar todos los datos que el cliente estará transmitiendo 75 | 76 | 0:01:33.740,0:01:35.860 77 | Ahora está listo para llevar a cabo el ataque 78 | 79 | 0:01:36.000,0:01:40.300 80 | Así que vayamos al teléfono inteligente y luego se conectan a la red de prueba WPA2-protegida 81 | 82 | 0:01:40.700,0:01:42.295 83 | Una vez que la víctima permitido a la conexión Wi-Fi 84 | 85 | 0:01:42.295,0:01:44.535 86 | Android buscará la red de prueba 87 | 88 | 0:01:45.960,0:01:51.600 89 | Una vez que se descubre que la red, intentará conectarse a la red de prueba real, que no es lo que queremos 90 | 91 | 0:01:51.900,0:01:58.020 92 | Afortunadamente, podemos resolver esto envía telegramas especiales Wi-Fi que comandan el Android en cambiar a un canal diferente 93 | 94 | 0:01:58.260,0:02:01.920 95 | Esto engaña Android en conexión con los maliciosos clonado de la red 96 | 97 | 0:02:02.460,0:02:07.500 98 | En esencia, ahora tenemos un hombre en la posición media entre la víctima y el verdadero red Wi-Fi 99 | 100 | 0:02:07.620,0:02:10.500 101 | Esto nos permite manipular de forma fiable los mensajes 102 | 103 | 0:02:10.500,0:02:13.900 104 | y llevar a cabo el ataque reinstalación clave contra el 4-way handshake 105 | 106 | 0:02:13.980,0:02:16.380 107 | Normalmente, después de ejecutar un ataque de ese 108 | 109 | 0:02:16.380,0:02:19.540 110 | la víctima reutilizará nonces al cifrar tramas de datos 111 | 112 | 0:02:19.540,0:02:22.420 113 | y esto nos permite recuperar los datos encriptados 114 | 115 | 0:02:22.500,0:02:24.780 116 | Sin embargo, debido a la aplicación de errores 117 | 118 | 0:02:24.780,0:02:28.105 119 | Android y Linux no se vuelva a instalar la clave secreta real 120 | 121 | 0:02:28.105,0:02:31.535 122 | En su lugar, van a volver a instalar una clave de cifrado de todo ceros 123 | 124 | 0:02:31.580,0:02:34.215 125 | Esto hace que un ensayo para interceptar y 126 | 127 | 0:02:34.220,0:02:36.820 128 | manipular todos los datos que se transmiten por estos dispositivos 129 | 130 | 0:02:37.760,0:02:42.940 131 | Cuando ahora vamos a Wireshark, ya podemos ver que una cantidad significativa de datos fue interceptado 132 | 133 | 0:02:43.200,0:02:49.020 134 | Tenga en cuenta que normalmente todos estos datos cifrados utilizando WPA2 y por lo tanto no es legible por el atacante. 135 | 136 | 0:02:49.240,0:02:52.820 137 | Sin embargo, sin conocer la contraseña de esta red Wi-Fi protegida 138 | 139 | 0:02:52.820,0:02:55.440 140 | podemos leer todos los paquetes que la víctima está enviando 141 | 142 | 0:02:55.460,0:02:59.740 143 | Esto demuestra claramente que hemos eludido WPA2 144 | 145 | 0:03:00.620,0:03:04.000 146 | Ahora vamos a visitar un sitio web en el dispositivo androide de la víctima 147 | 148 | 0:03:04.065,0:03:06.855 149 | Y en particular, se le volverá a visitar el match.com 150 | 151 | 0:03:10.520,0:03:15.360 152 | Como se puede ver ahora, ya no es un bloqueo HTTPS verde en la barra de direcciones del navegador 153 | 154 | 0:03:15.420,0:03:20.000 155 | Esto significa que el sitio web ya no está utilizando HTTPS como una capa adicional de protección 156 | 157 | 0:03:20.460,0:03:24.260 158 | Tenga en cuenta que usted es capaz de evitar el uso de HTTPS herramienta sslstrip 159 | 160 | 0:03:24.260,0:03:29.540 161 | aunque esta cuestión de HTTPS sin pasar por no trabajar en sitios adecuados configurados 162 | 163 | 0:03:29.545,0:03:32.020 164 | que funciona contra una fracción importancia 165 | 166 | 0:03:32.500,0:03:37.120 167 | Desafortunadamente, muchos usuarios no se dan cuenta de HTTPS ya no se usa 168 | 169 | 0:03:37.120,0:03:41.180 170 | y por lo tanto continuará iniciar la sesión utilizando su verdadera dirección de correo electrónico y contraseña 171 | 172 | 0:03:45.100,0:03:49.720 173 | El atacante es ahora capaz de interceptar la dirección de correo electrónico y la contraseña de la víctima. 174 | 175 | 0:03:49.720,0:03:52.200 176 | Por supuesto, esto es sólo una demostración del uso de una cuenta falsa 177 | 178 | 0:03:52.200,0:03:54.040 179 | es decir, el inicio de sesión falla 180 | 181 | 0:03:54.320,0:03:58.100 182 | Sin embargo, el atacante es capaz de ver qué contraseña tratamos de utilizar 183 | 184 | 0:03:58.100,0:04:01.040 185 | Así que vamos a ir al atacante y la búsqueda de la tentativa de inicio de sesión 186 | 187 | 0:04:07.220,0:04:12.620 188 | Podemos ver que el atacante era realmente capaz de interceptar el nombre de usuario y la contraseña que utiliza la víctima 189 | 190 | 0:04:13.600,0:04:19.400 191 | Para evitar ser víctima de este ataque contra WPA2, debe actualizar todos los dispositivos Wi-Fi 192 | 193 | -------------------------------------------------------------------------------- /followup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Auditing KRACKs in Wi-Fi 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | 21 | 28 | 29 | 30 |
31 |
32 | 44 |
45 | 57 |
58 |
59 | 60 | 61 | 62 |

Introduction

63 |

64 | After discovering key reinstallation attacks (KRACKs) against WPA2 last year, 65 | which allowed an attacker to recover data sent over a protected Wi-Fi network, 66 | we investigated whether products were properly updated to prevent attacks. 67 | Although we found that most vendors properly updated their products, in certain cases attacks were still possible. 68 | Apart from this, we also discovered techniques to bypass Wi-Fi's official defense against KRACK, 69 | allowing an adversary to replay broadcast and multicast frames. 70 | We are now also disclosing easier and more effective techniques to attack unpatched Wi-Fi devices. 71 | Finally, in new our paper we explain in more detail how to abuse certain vulnerabilities that were already disclosed last year. 72 |

73 |

74 | The good news is that most vendors already distributed (new) updates to prevent attacks, 75 | and that the impact of replaying broadcast and multicast frames is low in practice. 76 | Therefore most users should not worry, simply follow the usual security advice and keep your devices up to date. 77 | In other words, our new paper and results are not as serious as the original key reinstallation attacks. 78 | Nevertheless, our research is a good reminder that patching vulnerabilities can be hard in practice, 79 | and that we must keep checking whether devices are properly updated. 80 |

81 |

82 | All our new findings are described in detail in our research paper "Release the Kraken: New KRACKs in the 802.11 Standard" 83 | which will be presented at the Computer and Communications Security (CCS) 84 | conference this year. 85 |

86 | 87 | 88 | 89 | 90 |

Details

91 | 92 |

93 | Before explaining our new results, it's good to quickly recap our original findings. 94 | The following BCC video provides an excellent summary: 95 |

96 | 97 |
98 |
99 | 100 |
101 |
102 | 103 |

Overview of our new results

104 |

105 | In our new paper, we extend the original KRACK attack in several directions. 106 | First, we improve existing attacks against the 4-way handshake, making it easier to attack unpatched devices. 107 | We then study the Wi-Fi standard, and find that the FILS handshake is also vulnerable to key reinstallations. 108 | Fortunately, this handshake is not yet deployed in practice. 109 | Apart from this, the paper also shows how WNM power-save features can be abused to bypass Wi-Fi's official countermeasure against KRACK. 110 | Finally, we investigate whether products were properly updated to prevent key reinstallations, 111 | and discovered implementation-specific vulnerabilities related to key reinstallation attacks 112 | (e.g. we found vulnerabilities in macOS and iOS that have in the meantime been patched). 113 |

114 |

115 | The paper also describes how to abuse certain vulnerabilities that we already disclosed last year, but that were not yet discussed in detail. 116 | In particular, the paper explains how WNM power-save features can be abused to trigger reinstallations of the group key, 117 | and how the TPK handshake can be manipulated into reinstalling the TPK key. 118 | The TPK handshake enables direct connectivity between clients (e.g. between smart TV's and a tablets). 119 |

120 | 121 |

Improved 4-way handshake attacks

122 | 123 |

124 | We first increase the practicality of key reinstallation attacks against the 4-way handshake. 125 | Previously, device-specific and hard-to-win race conditions had to be used to exploit the 4-way handshake of Android, macOS, and OpenBSD. 126 | This was necessary, because otherwise these platforms would not accept the plaintext handshake message that triggers the key reinstallation. 127 | We overcame these limitations by generating an encrypted (instead of plaintext) handshake message that triggers the key reinstallation. 128 | As a result, an adversary no longer has to rely on hard-to-win race conditions to exploit vulnerable implementations of the 4-way handshake. 129 |

130 | 131 |

Attacking the FILS and TPK handshake

132 | 133 |

134 | A systematic analysis of the Wi-Fi standard revealed that the Fast Initial Link Setup (FILS) and Tunneled direct-link setup PeerKey (TPK) handshake are also vulnerable to key reinstallations. 135 | The FILS handshake can establish a secure Internet connection in only 100 ms, 136 | and is expected to be widely adopted in highly mobile environments. 137 | The TPK handshake is mainly used to stream data from a device to a smart TV, and establishes a direct tunnel between two clients. 138 | Fortunately, the FILS handshake is not yet used in practice, and the vulnerability in the TPK handshake was already patched during the coordinated disclosure last year. 139 |

140 | 141 |

Bypassing Wi-Fi's official countermeasure

142 | 143 |

144 | We also found that an adversary can abuse WNM-Sleep frames to bypass Wi-Fi's official defense against KRACK. 145 | That's because the official defense states that a device shouldn't reinstall an already in-use key. 146 | However, this defense can by bypassed by first letting the victim install a new key, to then let it (re)install an old key. 147 | On a technical level, this is achieved by exploiting interactions between EAPOL-Key frames and WNM-Sleep frames. 148 | An adversary can only reinstall the (integrity) group key in this manner. 149 | As a result, the impact of this bypass is low in practice. 150 | Note that WNM-Sleep frames are part of the 802.11v amendment to the Wi-Fi standard. 151 | Meanwhile, the Wi-Fi standard has been updated to prevent these kind of attacks. 152 |

153 |

154 | We also found implementation-specific vulnerabilities where the group key is improperly installed. 155 | For example, we found that certain devices always install the group key with a zero replay counter. 156 | More troublesome, we even discovered some devices that always accept replayed broadcast and multicast frames. 157 | All combined, this shows that securely handling and installing group keys is a non-trivial task. 158 |

159 | 160 |

Implementation-specific vulnerabilities

161 | 162 |

163 | Last but not least, we discovered several implementation-specific key reinstallation vulnerabilities while inspecting patches and open source code. 164 | For example, even after the patches that prevent the KRACK attack, 165 | macOS reused the SNonce during rekeys of the session key. 166 | As another example, iOS did not properly install the (integrity) group key. 167 | These vulnerabilities have a similar impact as the original KRACK attacks. 168 | Another noteworthy vulnerability is that some routers accept replayed message 4's of the 4-way handshake. 169 | In particular, more than 100 routers that use the MediaTek MT7620 chip, 170 | such as the RT-AC51U, are vulnerable to this attack. 171 | An adversary can abuse this to trivially trigger key reinstallations against the router, 172 | without having to obtain a man-in-the-middle position. 173 | In turn it becomes possible to decrypt, replay, and possibly forge frames. 174 |

175 | 176 |

Discussion: protocol gadgets

177 | 178 |

179 | One common theme in our new work is that seemingly innocent bugs, and even protocol features, can act as essential gadgets when trying to exploit (implementation-specific) protocol bugs. 180 | For example, on its own the technique to generate encrypted handshake messages is innocent. 181 | However, this technique allowed us to perform key reinstallation attacks against more devices than previously thought possible. 182 | Similarly, a bug in Linux allowing an insider to spoof the source and destination address, had little impact on its own. 183 | Unfortunately, this bug proved essential to trigger key reinstallations against certain versions of wpa_supplicant. 184 | As another example, having separate receive replay counters for each Quality-of-Service (QoS) channel is also not a security risk on its own. 185 | However, this protocol feature allowed us to attack the group key and TPK handshake. 186 | In other words, seemingly innocent protocol features or implementation bugs can act as essential gadgets that enable exploitation of other vulnerabilities. 187 |

188 | 189 |

190 | The most intriguing example is that users noticed that some versions of wpa_supplicant were installing an all-zero key upon receiving a retransmitted message 3. 191 | However, they did not realize an adversary could actively trigger these retransmissions, and therefore only treated this as an innocent bug. 192 | In a sense they almost discovered key reinstallation attacks, but failed to realize the capabilities of an adversary, and because of that did not realize this was an exploitable bug. 193 |

194 | 195 |

196 | These observations teach us that it can be very difficult to determine whether a protocol bug is exploitable or not. 197 | In other words, one needs an expert understanding of all available gadgets, i.e., related protocol features and implementations bugs. 198 | Only when having this knowledge is it possible to accurately determine whether, and under which conditions, a protocol bug is exploitable. 199 |

200 | 201 |

Conclusion

202 | 203 |

204 | Our results show that preventing key reinstallations is harder than initially assumed. 205 | For example, we were able to bypass Wi-Fi's official countermeasure and reinstall the group key. 206 | Additionally, we showed that the FILS handshake is vulnerable to key reinstallation attacks, 207 | and we also discovered novel implementation-specific vulnerabilities that facilitate key (re)installation attacks. 208 |

209 | 210 |

211 | We believe the main reason vulnerabilities are still present 212 | is because the Wi-Fi standard is large, 213 | is continually being expanded with new features, 214 | and requires domain-specific knowledge to understand. 215 | These obstacles can be overcome by having high-level descriptions (or formal models) of all security-related features of Wi-Fi. 216 | This would make it easier to reason about its design, and test the correctness of implementations. 217 | Additionally, we believe the Wi-Fi Alliance should not only test products for interoperability, but also fuzz them for vulnerabilities. 218 |

219 | 220 | 221 | 222 | 223 |

Paper

224 | 225 |

Our research paper behind the attack is titled Release the Kraken: New KRACKs in the 802.11 Standard and will be presented at the Computer and Communications Security (CCS) conference in October 2018. 226 | 227 | 228 |

To cite our paper, you can use the following example citation or bibtex entry:

229 |
230 |

Mathy Vanhoef and Frank Piessens. 2018. Release the Kraken: New KRACKs in the 802.11 Standard. In 2018 ACM SIGSAC Conference on Computer and Communications Security (CCS ’18). ACM.

231 |
@inproceedings{vanhoef-ccs2018,
232 |   author        = {Mathy Vanhoef and Frank Piessens},
233 |   title         = {Release the Kraken: new {KRACKs} in the 802.11 Standard},
234 |   booktitle     = {Proceedings of the 25th ACM Conference on Computer and Communications Security (CCS)},
235 |   year          = {2018},
236 |   publisher     = {ACM}
237 | }
238 |
239 | 240 | 241 | 242 | 243 |

New tools

244 |

Our proof-of-concept script to perform key reinstallation attacks is now available on github. 245 | It targets Android and Linux devices that (re)install an all-zero key. 246 | This script is also the one that we used in the demonstration video last year. 247 | We successfully tested it in a lab setup against Chromium and Android. 248 | The script uses Channel Switch Announcements to establish a channel-based man-in-the-middle. 249 |

250 |

251 | We remark that the reliability of our proof-of-concept script depends on how close the victim is to the real network. 252 | If the victim is close to the real network, the script may fail because the victim will always directly communicate with the real network, 253 | even if the victim is (forced) to use a Wi-Fi channel different from the real network. 254 |

255 | 256 | 257 | 258 | 259 |

Q&A

260 | 261 | 270 | 271 | 272 |

Why did you make a website about these new results?

273 |

274 | To clearly state that our new results are not as serious as the original key reinstallation attacks. 275 | Several new attacks mentioned in the paper are implementation-specific, 276 | and the attack against the TPK handshake was already patched during the coordinated disclosure last year. 277 | Similarly, key reinstallations caused by WNM frames were also already patched last year. 278 | However, in our new paper we describe for the first time how these (already disclosed) vulnerabilities can be exploited. 279 | Finally, the method to bypass Wi-Fi's official defense can only be abused to reinstall the (integrity) group key, 280 | and is non-trivial to execute in practice. 281 | Nevertheless, it is good to make people aware that fully preventing KRACK attacks is hard in practice, 282 | meaning it is important to keep checking whether devices are properly patched. 283 |

284 | 285 | 286 |

Will WPA3 prevent KRACK?

287 |

288 | On its own WPA3 does not prevent key reinstallation attacks. 289 | So a WPA3-capable device may be still vulnerable to KRACK. 290 | That's because internally WPA3 still uses the 4-way handshake (in combination with the new Dragonfly handshake). 291 | In other words, if a vendor does not properly implement the 4-way handshake, a WPA3 network may be vulnerable to KRACK. 292 | 296 |

297 | 298 | 299 |

Does KRACK also affect Opportunistic Wireless Encryption (OWE)?

300 |

301 | It could. 302 | Opportunistic Wireless Encryption (called Enhanced Open by the Wi-Fi Alliance) internally still uses the 4-way handshake 303 | (in addition to an unauthenticated Diffie-Hellman handshake). 304 | So if a vendor does not properly implement the 4-way handshake, an OWE network may also be vulnerable to KRACK. 305 |

306 | 307 | 308 |

Are the key reinstallations in the RT-AC51U fixed?

309 |

310 | Based on the firmware update history, 311 | the RT-AC51U router has not yet received a patched. 312 |

313 | 314 | 315 |

When did Apple fix the additional vulnerabilities?

316 |

317 | We do not know precisely when Apple patched the vulnerabilities mentioned in the paper, 318 | because the corresponding patches are not mentioned in Apple's security update notes. 319 | Based on our own tests, we know that the improper installation of the group key (GTK) was fixed in iOS 12.0 and above. 320 | Similarly, the SNonce reuse vulnerability was fixed in macOS High Seirra 10.13.3 and above. 321 | Do note that these vulnerabilities might have already been fixed in earlier versions, 322 | unfortunately, we are not able to test older versions ourselves. 323 |

324 | 325 | 326 |

Has the Wi-Fi standard been updated in the meantime?

327 |

328 | After the disclosure of key reinstallation attacks last years, 329 | the Wi-Fi standard was updated to prevent most attacks. 330 | However, even with this update, it is still possible to force a victim to temporarily install a new group key, to then reinstall an old group key. 331 | This allows an adversary to replay broadcast and multicast frames towards the victim. 332 | Abusing this remaining vulnerability is non-trivial, and has a low impact in practice. 333 | Nevertheless, it would be better to update the Wi-Fi standard such that all key reinstallation attacks are prevented. 334 |

335 | 336 | 337 |

Looking back, how serious do you think the original KRACK attack was?

338 |

339 | The original KRACK attack highlighted a weakness in the core of the WPA2 standard, 340 | and practically all clients were affected by some variant of the attack. 341 | This was very surprising, considering the core of WPA2 was formally proven secure, 342 | and over its decade-long lifetime, 343 | there were no known attacks against it (assuming a strong password is used). 344 | Therefore the impact was quite serious and unexpected. 345 |

346 |

347 | Thankfully, in practice it appears few people are abusing KRACK. 348 | We attribute this to two important factors. 349 | First, thanks to the coordinated disclosure last year, a significant proportion of devices were quickly patched 350 | (even though some devices took a really long time to receive updates). 351 | Second, we purposely did not release our attack tools, making it non-trivial for others to abuse KRACK in practice. 352 | Even the tools we released now are purposely not fully weaponized, to prevent people from easily performing KRACK attacks in practice. 353 |

354 | 355 | 356 |
357 |
358 |
359 |
360 |
361 | 362 | 366 | 423 | 424 | 425 | -------------------------------------------------------------------------------- /gen-qa-index.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | from bs4 import BeautifulSoup 3 | 4 | def gen_qa_index(filename): 5 | soup = BeautifulSoup(open(filename), "html.parser") 6 | faq = soup.find("a", {"name": "faq"}) 7 | faq_titles = faq.find_next_siblings("h3") 8 | faq_anchors = faq.find_next_siblings("a") 9 | assert len(faq_titles) == len(faq_anchors) 10 | 11 | print "" 15 | 16 | 17 | if __name__ == "__main__": 18 | gen_qa_index("index.html") 19 | gen_qa_index("followup.html") 20 | 21 | -------------------------------------------------------------------------------- /images/bg01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanhoefm/krackattacks/e3745400ba9ead2dec7e1393e0e521cf14c18d55/images/bg01.png -------------------------------------------------------------------------------- /images/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanhoefm/krackattacks/e3745400ba9ead2dec7e1393e0e521cf14c18d55/images/down.png -------------------------------------------------------------------------------- /images/downup.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanhoefm/krackattacks/e3745400ba9ead2dec7e1393e0e521cf14c18d55/images/favicon.ico -------------------------------------------------------------------------------- /images/logo-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanhoefm/krackattacks/e3745400ba9ead2dec7e1393e0e521cf14c18d55/images/logo-small.png -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanhoefm/krackattacks/e3745400ba9ead2dec7e1393e0e521cf14c18d55/images/logo.png -------------------------------------------------------------------------------- /images/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanhoefm/krackattacks/e3745400ba9ead2dec7e1393e0e521cf14c18d55/images/up.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | KRACK Attacks: Breaking WPA2 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | 21 | 22 | 29 | 30 | 31 |
32 |
33 | 45 |
46 | 59 |
60 |
61 | 62 | 63 | 64 |

Introduction

65 |

We discovered serious weaknesses in WPA2, a protocol that secures all modern protected Wi-Fi networks. 66 | An attacker within range of a victim can exploit these weaknesses using key reinstallation attacks (KRACKs). 67 | Concretely, attackers can use this novel attack technique to read information that was previously assumed to be safely encrypted. 68 | This can be abused to steal sensitive information such as credit card numbers, passwords, chat messages, emails, photos, and so on. 69 | The attack works against all modern protected Wi-Fi networks. 70 | Depending on the network configuration, it is also possible to inject and manipulate data. 71 | For example, an attacker might be able to inject ransomware or other malware into websites.

72 | 73 |

The weaknesses are in the Wi-Fi standard itself, and not in individual products or implementations. 74 | Therefore, any correct implementation of WPA2 is likely affected. 75 | To prevent the attack, users must update affected products as soon as security updates become available. 76 | Note that if your device supports Wi-Fi, it is most likely affected. 77 | During our initial research, we discovered ourselves that Android, Linux, Apple, Windows, OpenBSD, MediaTek, Linksys, and others, are all affected by some variant of the attacks. 78 | For more information about specific products, consult the database of CERT/CC, or contact your vendor.

79 | 80 |

The research behind the attack will be presented at the Computer and Communications Security (CCS) conference, and at the Black Hat Europe conference. Our detailed research paper can already be downloaded.

81 | 82 |

Update October 2018: we have a follow-up paper where we generalize attacks, 83 | analyze more handshakes, 84 | bypass Wi-Fi's official defense, 85 | audit patches, 86 | and enhance attacks using implementation-specific bugs.

87 | 88 | 89 | 90 | 91 |

Demonstration

92 |

As a proof-of-concept we executed a key reinstallation attack against an Android smartphone. 93 | In this demonstration, the attacker is able to decrypt all data that the victim transmits. 94 | For an attacker this is easy to accomplish, because our key reinstallation attack is exceptionally devastating against Linux and Android 6.0 or higher. 95 | This is because Android and Linux can be tricked into (re)installing an all-zero encryption key (see below for more info). 96 | When attacking other devices, it is harder to decrypt all packets, although a large number of packets can nevertheless be decrypted. 97 | In any case, the following demonstration highlights the type of information that an attacker can obtain when performing key reinstallation attacks against protected Wi-Fi networks: 98 |

99 |
100 |
101 | 102 | 103 |
104 |
105 |

Our attack is not limited to recovering login credentials (i.e. e-mail addresses and passwords). 106 | In general, any data or information that the victim transmits can be decrypted. Additionally, depending on the device being used and the network setup, it is also possible to decrypt data sent towards the victim (e.g. the content of a website). 107 | Although websites or apps may use HTTPS as an additional layer of protection, we warn that this extra protection can (still) be bypassed in a worrying number of situations. 108 | 109 | For example, HTTPS was previously bypassed in non-browser software, 110 | in Apple's iOS and OS X, 111 | in Android apps, 112 | in Android apps again, 113 | in banking apps, 114 | and even in VPN apps. 115 |

116 | 117 | 118 | 119 | 120 |

Details

121 | 122 | 123 | 124 |

Our main attack is against the 4-way handshake of the WPA2 protocol. 125 | This handshake is executed when a client wants to join a protected Wi-Fi network, and is used to confirm that both the client and access point possess the correct credentials (e.g. the pre-shared password of the network). 126 | At the same time, the 4-way handshake also negotiates a fresh encryption key that will be used to encrypt all subsequent traffic. 127 | Currently, all modern protected Wi-Fi networks use the 4-way handshake. 128 | This implies all these networks are affected by (some variant of) our attack. 129 | For instance, the attack works against personal and enterprise Wi-Fi networks, against the older WPA and the latest WPA2 standard, and even against networks that only use AES. 130 | 131 | All our attacks against WPA2 use a novel technique called a key reinstallation attack (KRACK):

132 | 133 |

Key reinstallation attacks: high level description

134 |

In a key reinstallation attack, the adversary tricks a victim into reinstalling an already-in-use key. 135 | This is achieved by manipulating and replaying cryptographic handshake messages. 136 | When the victim reinstalls the key, associated parameters such as the incremental transmit packet number (i.e. nonce) and receive packet number (i.e. replay counter) are reset to their initial value. 137 | Essentially, to guarantee security, a key should only be installed and used once. 138 | Unfortunately, we found this is not guaranteed by the WPA2 protocol. 139 | By manipulating cryptographic handshakes, we can abuse this weakness in practice.

140 | 141 |

Key reinstallation attacks: concrete example against the 4-way handshake

142 |

As described in the introduction of the research paper, the idea behind a key reinstallation attack can be summarized as follows. 143 | When a client joins a network, it executes the 4-way handshake to negotiate a fresh encryption key. 144 | It will install this key after receiving message 3 of the 4-way handshake. 145 | Once the key is installed, it will be used to encrypt normal data frames using an encryption protocol. 146 | However, because messages may be lost or dropped, the Access Point (AP) will retransmit message 3 if it did not receive an appropriate response as acknowledgment. 147 | As a result, the client may receive message 3 multiple times. 148 | Each time it receives this message, it will reinstall the same encryption key, and thereby reset the incremental transmit packet number (nonce) and receive replay counter used by the encryption protocol. 149 | We show that an attacker can force these nonce resets by collecting and replaying retransmissions of message 3 of the 4-way handshake. 150 | By forcing nonce reuse in this manner, the encryption protocol can be attacked, e.g., packets can be replayed, decrypted, and/or forged. 151 | The same technique can also be used to attack the group key, PeerKey, TDLS, and fast BSS transition handshake.

152 | 153 | 154 | 155 |

Practical impact

156 | 157 |

In our opinion, the most widespread and practically impactful attack is the key reinstallation attack against the 4-way handshake. 158 | We base this judgement on two observations. 159 | First, during our own research we found that most clients were affected by it. 160 | Second, adversaries can use this attack to decrypt packets sent by clients, allowing them to intercept sensitive information such as passwords or cookies. 161 | Decryption of packets is possible because a key reinstallation attack causes the transmit nonces (sometimes also called packet numbers or initialization vectors) to be reset to their initial value. 162 | As a result, the same encryption key is used with nonce values that have already been used in the past. 163 | In turn, this causes all encryption protocols of WPA2 to reuse keystream when encrypting packets. 164 | In case a message that reuses keystream has known content, it becomes trivial to derive the used keystream. 165 | This keystream can then be used to decrypt messages with the same nonce. 166 | When there is no known content, it is harder to decrypt packets, although still possible in several cases (e.g. English text can still be decrypted). 167 | 168 | In practice, finding packets with known content is not a problem, so it should be assumed that any packet can be decrypted. 169 |

170 | 171 |

The ability to decrypt packets can be used to decrypt TCP SYN packets. 172 | This allows an adversary to obtain the TCP sequence numbers of a connection, and hijack TCP connections. 173 | As a result, even though WPA2 is used, the adversary can now perform one of the most common attacks against open Wi-Fi networks: injecting malicious data into unencrypted HTTP connections. 174 | For example, an attacker can abuse this to inject ransomware or malware into websites that the victim is visiting.

175 | 176 |

If the victim uses either the WPA-TKIP or GCMP encryption protocol, instead of AES-CCMP, the impact is especially catastrophic. 177 | Against these encryption protocols, nonce reuse enables an adversary to not only decrypt, but also to forge and inject packets. 178 | Moreover, because GCMP uses the same authentication key in both communication directions, and this key can be recovered if nonces are reused, it is especially affected. 179 | Note that support for GCMP is currently being rolled out under the name Wireless Gigabit (WiGig), and is expected to be adopted at a high rate over the next few years.

180 | 181 |

The direction in which packets can be decrypted (and possibly forged) depends on the handshake being attacked. 182 | Simplified, when attacking the 4-way handshake, we can decrypt (and forge) packets sent by the client. 183 | When attacking the Fast BSS Transition (FT) handshake, we can decrypt (and forge) packets sent towards the client. 184 | Finally, most of our attacks also allow the replay of unicast, broadcast, and multicast frames. 185 | For further details, see Section 6 of our research paper.

186 | 187 |

Note that our attacks do not recover the password of the Wi-Fi network. They also do not recover (any parts of) the fresh encryption key that is negotiated during the 4-way handshake.

188 | 189 | 190 |

Android and Linux

191 | 192 |

Our attack is especially catastrophic against version 2.4 and above of wpa_supplicant, a Wi-Fi client commonly used on Linux. 193 | Here, the client will install an all-zero encryption key instead of reinstalling the real key. 194 | This vulnerability appears to be caused by a remark in the Wi-Fi standard that suggests to clear the encryption key from memory once it has been installed for the first time. 195 | When the client now receives a retransmitted message 3 of the 4-way handshake, it will reinstall the now-cleared encryption key, effectively installing an all-zero key. 196 | Because Android uses wpa_supplicant, Android 6.0 and above also contains this vulnerability. 197 | This makes it trivial to intercept and manipulate traffic sent by these Linux and Android devices. 198 | 199 | Note that currently 50% of Android devices are vulnerable to this exceptionally devastating variant of our attack.

200 | 201 | 202 |

Assigned CVE identifiers

203 |

The following Common Vulnerabilities and Exposures (CVE) identifiers were assigned to track which products are affected by specific instantiations of our key reinstallation attack:

204 |
    205 |
  • CVE-2017-13077: Reinstallation of the pairwise encryption key (PTK-TK) in the 4-way handshake.
  • 206 |
  • CVE-2017-13078: Reinstallation of the group key (GTK) in the 4-way handshake.
  • 207 |
  • CVE-2017-13079: Reinstallation of the integrity group key (IGTK) in the 4-way handshake.
  • 208 |
  • CVE-2017-13080: Reinstallation of the group key (GTK) in the group key handshake.
  • 209 |
  • CVE-2017-13081: Reinstallation of the integrity group key (IGTK) in the group key handshake.
  • 210 |
  • CVE-2017-13082: Accepting a retransmitted Fast BSS Transition (FT) Reassociation Request and reinstalling the pairwise encryption key (PTK-TK) while processing it.
  • 211 |
  • CVE-2017-13084: Reinstallation of the STK key in the PeerKey handshake.
  • 212 |
  • CVE-2017-13086: reinstallation of the Tunneled Direct-Link Setup (TDLS) PeerKey (TPK) key in the TDLS handshake.
  • 213 |
  • CVE-2017-13087: reinstallation of the group key (GTK) when processing a Wireless Network Management (WNM) Sleep Mode Response frame.
  • 214 |
  • CVE-2017-13088: reinstallation of the integrity group key (IGTK) when processing a Wireless Network Management (WNM) Sleep Mode Response frame.
  • 215 |
216 |

Note that each CVE identifier represents a specific instantiation of a key reinstallation attack. This means each CVE ID describes a specific protocol vulnerability, and therefore many vendors are affected by each individual CVE ID. You can also read vulnerability note VU#228519 of CERT/CC for additional details on which products are known to be affected.

217 |

218 | 219 | 220 | 221 |

Paper

222 | 223 | 224 |

Our research paper behind the attack is titled Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2 and will be presented at the Computer and Communications Security (CCS) conference on Wednesday 1 November 2017. 225 | 226 |

Although this paper is made public now, it was already submitted for review on 19 May 2017. 227 | After this, only minor changes were made. 228 | As a result, the findings in the paper are already several months old. 229 | In the meantime, we have found easier techniques to carry out our key reinstallation attack against the 4-way handshake. 230 | With our novel attack technique, it is now trivial to exploit implementations that only accept encrypted retransmissions of message 3 of the 4-way handshake. 231 | In particular this means that attacking macOS and OpenBSD is significantly easier than discussed in the paper.

232 | 233 |

We would like to highlight the following addendums and errata:

234 | 235 |

Addendum: wpa_supplicant v2.6 and Android 6.0+

236 | 237 |

Linux's wpa_supplicant v2.6 is also vulnerable to the installation of an all-zero encryption key in the 4-way handshake. 238 | This was discovered by John A. Van Boxtel. 239 | As a result, all Android versions higher than 6.0 are also affected by the attack, and hence can be tricked into installing an all-zero encryption key. 240 | The new attack works by injecting a forged message 1, with the same ANonce as used in the original message 1, before forwarding the retransmitted message 3 to the victim. 241 | 242 |

243 | 244 |

Addendum: other vulnerable handshakes

245 |

After our initial research as reported in the paper, we discovered that the TDLS handshake and WNM Sleep Mode Response frame are also vulnerable to key reinstallation attacks.

246 | 247 | 248 |

Selected errata

249 |
    250 |
  • In Figure 9 at stage 3 of the attack, the frame transmitted from the adversary to the authenticator should say "ReassoReq(ANonce, SNonce, MIC)" instead of "ReassoResp(..)".
  • 251 |
  • Section 3.1: figure 3 contains a simplified description of the state machine (not figure 2).
  • 252 |
  • Section 4.2: "It is essential that the broadcast frame we replay is sent after (not before) the retransmission of group message 1". A similar change should be made in Section 4.3: "Again it is essential that the broadcast frame we want to replay is sent after (not before) the retransmission of group message 1".
  • 253 |
254 | 255 | 256 |

Citation example and bibtex entry

257 |

Please cite our research paper and not this website (or cite both). You can use the following example citation or bibtex entry:

258 |
259 |

Mathy Vanhoef and Frank Piessens. 2017. Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2. In Proceedings of the 24th ACM Conference on Computer and Communications Security (CCS). ACM.

260 |
@inproceedings{vanhoef-ccs2017,
261 |   author        = {Mathy Vanhoef and Frank Piessens},
262 |   title         = {Key Reinstallation Attacks: Forcing Nonce Reuse in {WPA2}},
263 |   booktitle     = {Proceedings of the 24th ACM Conference on Computer and Communications Security (CCS)},
264 |   year          = {2017},
265 |   publisher     = {ACM}
266 | }
267 |
268 | 269 | 270 | 271 | 272 |

Tools

273 |

We have made scripts to detect whether an implementation of the 4-way handshake, group key handshake, or Fast BSS Transition (FT) handshake is vulnerable to key reinstallation attacks. 274 | These scripts are available on github, and contain detailed instructions on how to use them. 275 |

276 |

We also made a proof-of-concept script that exploits the all-zero key (re)installation present in certain Android and Linux devices. 277 | This script is the one that we used in the demonstration video. 278 | It will be released once everyone has had a reasonable chance to update their devices (and we have had a chance to prepare the code repository for release). 279 | We remark that the reliability of our proof-of-concept script may depend on how close the victim is to the real network. 280 | If the victim is very close to the real network, the script may fail because the victim will always directly communicate with the real network, even if the victim is (forced) onto a different Wi-Fi channel than this network. 281 |

282 | 283 | 284 | 285 | 289 | 290 | 291 |

Q&A

292 | 293 | 323 | 324 | 325 |

Is there a higher resolution version of the logo?

326 |

Yes there is. And a big thank you goes to Darlee Urbiztondo for conceptualizing and designing the logo!

327 | 328 | 329 |

Do we now need WPA3?

330 |

No, luckily implementations can be patched in a backwards-compatible manner. 331 | This means a patched client can still communicate with an unpatched access point (AP), and vice versa. 332 | In other words, a patched client or access point sends exactly the same handshake messages as before, and at exactly the same moment in time. 333 | However, the security updates will assure a key is only installed once, preventing our attack. 334 | So again, update all your devices once security updates are available. 335 | Finally, although an unpatched client can still connect to a patched AP, and vice versa, both the client and AP must be patched to defend against all attacks!

336 | 337 | 338 |

Should I change my Wi-Fi password?

339 |

Changing the password of your Wi-Fi network does not prevent (or mitigate) the attack. So you do not have to update the password of your Wi-Fi network. Instead, you should make sure all your devices are updated, and you should also update the firmware of your router. Nevertheless, after updating both your client devices and your router, it's never a bad idea to change the Wi-Fi password.

340 | 341 | 342 |

I'm using WPA2 with only AES. That's also vulnerable?

343 |

Yes, that network configuration is also vulnerable. The attack works against both WPA1 and WPA2, against personal and enterprise networks, and against any cipher suite being used (WPA-TKIP, AES-CCMP, and GCMP). So everyone should update their devices to prevent the attack!

344 | 345 | 346 |

You use the word "we" in this website. Who is we?

347 |

I use the word "we" because that's what I'm used to writing in papers. In practice, all the work is done by me, with me being Mathy Vanhoef. 348 | My awesome supervisor is added under an honorary authorship to the research paper for his excellent general guidance. 349 | But all the real work was done on my own. 350 | So the author list of academic papers does not represent division of work :)

351 | 352 | 353 |

Is my device vulnerable?

354 |

Probably. Any device that uses Wi-Fi is likely vulnerable. Contact your vendor for more information, or consult this community maintained list on GitHub.

355 | 356 | 357 |

What if there are no security updates for my router or access point? Or if it does not support 802.11r?

358 |

359 | Routers or access points (APs) are only vulnerable to our attack if they support the Fast BSS Transition (FT) handshake, or if they support client (repeater) functionality. 360 | First, the FT handshake is part of 802.11r, and is mainly supported by enterprise networks, and not by home routers or APs. 361 | Additionally, most home routers or APs do not support (or will not use) client functionality. 362 | In other words, your home router or AP likely does not require security updates. 363 | Instead, it are mainly enterprise networks that will have to update their network infrastructure (i.e. their routers and access points).

364 | 365 |

That said, some vendors discovered implementation-specific security issues while investigating our attack. 366 | For example, it was discovered that hostapd reuses the ANonce value in the 4-way handshake during rekeys. 367 | Concretely this means that, even if your router or AP does not support 802.11r, and even if it does not support client functionality, it might still have to be updated. 368 | Contact your vendor for more details. 369 |

370 |

Finally, we remark that you can try to mitigate attacks against routers and APs by disabling client functionality (which is for example used in repeater modes) and disabling 802.11r (fast roaming). 371 | Additionally, update all your other client devices such as laptops and smartphones. 372 | If one or more of your client devices is not receiving updates, you can also try to contact your router's vendor and ask if they have an update that prevents attacks against connected devices.

373 | 374 | 375 |

Is it sufficient to patch only the access point? Or to patch only clients?

376 |

Currently, all vulnerable devices should be patched. 377 | In other words, patching the AP will not prevent attacks against vulnerable clients. 378 | Similarly, patching all clients will not prevent attacks against vulnerable access points. 379 | Note that only access points that support the Fast BSS Transition handshake (802.11r) can be vulnerable.

380 |

381 | That said, it is possible to modify the access point such that vulnerable clients (when connected to this AP) cannot be attacked. 382 | However, these modifications are different from the normal security patches that are being released for vulnerable access points! 383 | So unless your access point vendor explicitly mentions that their patches prevent attacks against clients, you must also patch clients.

384 | 385 | 386 |

Can we modify an access point to prevent attacks against the client?

387 | 388 |

It's possible to modify the access point (router) such that connected clients are not vulnerable to attacks against the 4-way handshake and group key handshake. 389 | Note that we consider these two attacks the most serious and widespread security issues we discovered. 390 | However, these modifications only prevent attacks when a vulnerable client is connected to such a modified access point. 391 | When a vulnerable client connects to a different access point, it can still be attacked.

392 |

Technically, this is accomplished by modifying the access point such that it does not retransmit message 3 of the 4-way handshake. 393 | Additionally, the access point is modified to not retransmit message 1 of the group key handshake. 394 | The hostapd project has such a modification available. 395 | They are currently evaluating to which extend this impacts the reliability of these handshakes. 396 | We remark that the client-side attacks against the 4-way handshake and group key handshake can also be prevented by retransmitting the above handshake messages using the same (previous) EAPOL-Key replay counter. 397 | The attack against the group key handshake can also be prevented by letting the access point install the group key in a delayed fashion, and by assuring the access point only accepts the latest replay counter (see section 4.3 of the paper for details). 398 |

399 |

On some products, variants or generalizations of the above mitigations can be enabled without having to update products. 400 | 401 | For example, on some access points retransmissions of all handshake messages can be disabled, preventing client-side attacks against the 4-way and group key handshake (see for example Cisco).

402 | 403 | 404 |

How did you discover these vulnerabilities?

405 |

When working on the final (i.e. camera-ready) version of another paper, I was double-checking some claims we made regarding OpenBSD's implementation of the 4-way handshake. In a sense I was slacking off, because I was supposed to be just finishing the paper, instead of staring at code. But there I was, inspecting some code I already read a hundred times, to avoid having to work on the next paragraph. It was at that time that a particular call to ic_set_key caught my attention. This function is called when processing message 3 of the 4-way handshake, and it installs the pairwise key to the driver. While staring at that line of code I thought “Ha. I wonder what happens if that function is called twice”. At the time I (correctly) guessed that calling it twice might reset the nonces associated to the key. And since message 3 can be retransmitted by the Access Point, in practice it might indeed be called twice. “Better make a note of that. Other vendors might also call such a function twice. But let's first finish this paper...”. A few weeks later, after finishing the paper and completing some other work, I investigated this new idea in more detail. And the rest is history.

406 | 407 | 408 |

The 4-way handshake was mathematically proven as secure. How is your attack possible?

409 |

The brief answer is that the formal proof does not assure a key is installed only once. Instead, it merely assures the negotiated key remains secret, and that handshake messages cannot be forged.

410 |

The longer answer is mentioned in the introduction of our research paper: our attacks do not violate the security properties proven in formal analysis of the 4-way handshake. 411 | In particular, these proofs state that the negotiated encryption key remains private, and that the identity of both the client and Access Point (AP) is confirmed. 412 | Our attacks do not leak the encryption key. 413 | Additionally, although normal data frames can be forged if TKIP or GCMP is used, an attacker cannot forge handshake messages and hence cannot impersonate the client or AP during handshakes. 414 | Therefore, the properties that were proven in formal analysis of the 4-way handshake remain true. 415 | However, the problem is that the proofs do not model key installation. 416 | Put differently, the formal models did not define when a negotiated key should be installed. 417 | In practice, this means the same key can be installed multiple times, thereby resetting nonces and replay counters used by the encryption protocol (e.g. by WPA-TKIP or AES-CCMP).

418 | 419 | 420 |

Some attacks in the paper seem hard

421 |

We have follow-up work making our attacks (against macOS and OpenBSD for example) significantly more general and easier to execute. 422 | So although we agree that some of the attack scenarios in the paper are rather impractical, do not let this fool you into believing key reinstallation attacks cannot be abused in practice.

423 | 424 | 425 |

If an attacker can do a man-in-the-middle attack, why can't they just decrypt all the data?

426 |

As mentioned in the demonstration, the attacker first obtains a man-in-the-middle (MitM) position between the victim and the real Wi-Fi network (called a channel-based MitM position). 427 | However, this MitM position does not enable the attacker to decrypt packets! 428 | This position only allows the attacker to reliably delay, block, or replay encrypted packets. 429 | So at this point in the attack, they cannot yet decrypt packets. 430 | Instead, the ability to reliably delay and block packets is used to execute a key reinstallation attack. 431 | After performing a key reinstallation attack, packets can be decrypted.

432 | 433 | 434 |

Does an attacker to have be near your network in order to attack it?

435 |

An adversary has to be within range of both the client being attacked (meaning the smartphone or laptop) and the network itself. 436 | This means an adversary on the other side of the world cannot attack you remotely. 437 | However, the attacker can still be relatively far way. 438 | That's because special antenna can be used to carry out the attack from two miles to up to eight miles in ideal conditions. 439 | Additionally, the attacker is not competing with the signal strength of the real Wi-Fi network, but instead uses so-called Channel Switch Announcements to manipulate and attack the client. 440 | As a result, it is possible to successfully carry out attacks even when far away from the victim. 441 |

442 | 443 | 444 |

Are people exploiting this in the wild?

445 |

We are not in a position to determine if this vulnerability has been (or is being) actively exploited in the wild. That said, key reinstallations can actually occur spontaneously without an adversary being present! This may for example happen if the last message of a handshake is lost due to background noise, causing a retransmission of the previous message. When processing this retransmitted message, keys may be reinstalled, resulting in nonce reuse just like in a real attack.

446 | 447 | 448 |

Should I temporarily use WEP until my devices are patched?

449 |

NO! Keep using WPA2.

450 | 451 | 452 |

Will the Wi-Fi standard be updated to address this?

453 |

There seems to be an agreement that the Wi-Fi standard should be updated to explicitly prevent our attacks. 454 | These updates likely will be backwards-compatible with older implementations of WPA2. 455 | Time will tell whether and how the standard will be updated.

456 | 457 | 458 |

Is the Wi-Fi Alliance also addressing these vulnerabilities?

459 |

For those unfamiliar with Wi-Fi, the Wi-Fi Alliance is an organization which certifies that Wi-Fi devices conform to certain standards of interoperability. Among other things, this assures that Wi-Fi products from different vendors work well together.

460 |

The Wi-Fi Alliance has a plan to help remedy the discovered vulnerabilities in WPA2. Summarized, they will:

461 |
    462 |
  • Require testing for this vulnerability within their global certification lab network.
  • 463 |
  • Provide a vulnerability detection tool for use by any Wi-Fi Alliance member (this tool is based on my own detection tool that determines if a device is vulnerable to some of the discovered key reinstallation attacks).
  • 464 |
  • Broadly communicate details on this vulnerability, including remedies, to device vendors. Additionally, vendors are encouraged to work with their solution providers to rapidly integrate any necessary patches.
  • 465 |
  • Communicate the importance for users to ensure they have installed the latest recommended security updates from device manufacturers.
  • 466 |
467 | 468 | 469 |

Why did you use match.com as an example in the demonstration video?

470 |

Users share a lot of personal information on websites such as match.com. So this example highlights all the sensitive information an attacker can obtain, and hopefully with this example people also better realize the potential (personal) impact. We also hope this example makes people aware of all the information these dating websites may be collecting.

471 | 472 | 473 |

How can these types of bugs be prevented?

474 |

We need more rigorous inspections of protocol implementations. This requires help and additional research from the academic community! Together with other researchers, we hope to organize workshop(s) to improve and verify the correctness of security protocol implementations.

475 | 476 | 477 |

Why the domain name krackattacks.com?

478 |

First, I'm aware that KRACK attacks is a pleonasm, since KRACK stands for key reinstallation attack and hence already contains the word attack. But the domain name rhymes, so that's why it's used.

479 | 480 | 481 |

Did you get bug bounties for this?

482 |

Hackerone has awarded a bug bounty for our research under their Internet Bug Bounty (IBB) award program.

483 | 484 | 485 |

How does this attack compare to other attacks against WPA2?

486 |

This is the first attack against the WPA2 protocol that doesn't rely on password guessing. Indeed, other attacks against WPA2-enabled network are against surrounding technologies such as Wi-Fi Protected Setup (WPS), or are attacks against older standards such as WPA-TKIP. Put differently, none of the existing attacks were against the 4-way handshake or against cipher suites defined in the WPA2 protocol. In contrast, our key reinstallation attack against the 4-way handshake (and against other handshakes) highlights vulnerabilities in the WPA2 protocol itself.

487 | 488 | 489 |

Are other protocols also affected by key reinstallation attacks?

490 |

We expect that certain implementations of other protocols may be vulnerable to similar attacks. So it's a good idea to audit security protocol implementations with this attack in mind. However, we consider it unlikely that other protocol standards are affected by similar attacks (or at least so we hope). Nevertheless, it's still a good idea to audit other protocols!

491 | 492 | 493 |

When did you first notify vendors about the vulnerability?

494 |

We sent out notifications to vendors whose products we tested ourselves around 14 July 2017. After communicating with these vendors, we realized how widespread the weaknesses we discovered are (only then did I truly convince myself it was indeed a protocol weaknesses and not a set of implementation bugs). At that point, we decided to let CERT/CC help with the disclosure of the vulnerabilities. In turn, CERT/CC sent out a broad notification to vendors on 28 August 2017.

495 | 496 | 497 |

Why did OpenBSD silently release a patch before the embargo?

498 |

OpenBSD announced an errata on 30 August 2017 that silently prevented our key reinstallation attacks. 499 | More specifically, patches were released for both OpenBSD 6.0 and OpenBSD 6.1.

500 |

We notified OpenBSD of the vulnerability on 15 July 2017, before CERT/CC was involved in the coordination. Quite quickly, Theo de Raadt replied and critiqued the tentative disclosure deadline: “In the open source world, if a person writes a diff and has to sit on it for a month, that is very discouraging”. Note that I wrote and included a suggested diff for OpenBSD already, and that at the time the tentative disclosure deadline was around the end of August. As a compromise, I allowed them to silently patch the vulnerability. In hindsight this was a bad decision, since others might rediscover the vulnerability by inspecting their silent patch. To avoid this problem in the future, OpenBSD will now receive vulnerability notifications closer to the end of an embargo.

501 | 502 | 503 |

So you expect to find other Wi-Fi vulnerabilities?

504 |

“I think we're just getting started.”  — Master Chief, Halo 1

505 | 506 | 507 |

Where can I learn more about key reinstallation attacks?

508 |

Good technical information and comments:

509 | 516 |

Selected newspapers with high-level information:

517 | 530 | 531 | 532 |
533 |
534 |
535 |
536 |
537 | 538 | 542 | 599 | 600 | 601 | -------------------------------------------------------------------------------- /js/modernizr.min.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.8.3 (Custom Build) | MIT & BSD 2 | * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load 3 | */ 4 | ;window.Modernizr=function(a,b,c){function C(a){j.cssText=a}function D(a,b){return C(n.join(a+";")+(b||""))}function E(a,b){return typeof a===b}function F(a,b){return!!~(""+a).indexOf(b)}function G(a,b){for(var d in a){var e=a[d];if(!F(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function H(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:E(f,"function")?f.bind(d||b):f}return!1}function I(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return E(b,"string")||E(b,"undefined")?G(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),H(e,b,c))}function J(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=E(e[d],"function"),E(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),A={}.hasOwnProperty,B;!E(A,"undefined")&&!E(A.call,"undefined")?B=function(a,b){return A.call(a,b)}:B=function(a,b){return b in a&&E(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return I("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!E(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!I("indexedDB",a)},s.hashchange=function(){return z("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return C("background-color:rgba(150,255,150,.5)"),F(j.backgroundColor,"rgba")},s.hsla=function(){return C("background-color:hsla(120,40%,100%,.5)"),F(j.backgroundColor,"rgba")||F(j.backgroundColor,"hsla")},s.multiplebgs=function(){return C("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return I("backgroundSize")},s.borderimage=function(){return I("borderImage")},s.borderradius=function(){return I("borderRadius")},s.boxshadow=function(){return I("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return D("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return I("animationName")},s.csscolumns=function(){return I("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return C((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),F(j.backgroundImage,"gradient")},s.cssreflections=function(){return I("boxReflect")},s.csstransforms=function(){return!!I("transform")},s.csstransforms3d=function(){var a=!!I("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return I("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var K in s)B(s,K)&&(x=K.toLowerCase(),e[x]=s[K](),v.push((e[x]?"":"no-")+x));return e.input||J(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)B(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},C(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.hasEvent=z,e.testProp=function(a){return G([a])},e.testAllProps=I,e.testStyles=y,e.prefixed=function(a,b,c){return b?I(a,b,c):I(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f #mq-test-1 { width: 42px; }'; 18 | docElem.insertBefore(fakeBody, refNode); 19 | bool = div.offsetWidth === 42; 20 | docElem.removeChild(fakeBody); 21 | return { 22 | matches: bool, 23 | media: q 24 | }; 25 | }; 26 | }(w.document); 27 | })(this); 28 | 29 | (function(w) { 30 | "use strict"; 31 | var respond = {}; 32 | w.respond = respond; 33 | respond.update = function() {}; 34 | var requestQueue = [], xmlHttp = function() { 35 | var xmlhttpmethod = false; 36 | try { 37 | xmlhttpmethod = new w.XMLHttpRequest(); 38 | } catch (e) { 39 | xmlhttpmethod = new w.ActiveXObject("Microsoft.XMLHTTP"); 40 | } 41 | return function() { 42 | return xmlhttpmethod; 43 | }; 44 | }(), ajax = function(url, callback) { 45 | var req = xmlHttp(); 46 | if (!req) { 47 | return; 48 | } 49 | req.open("GET", url, true); 50 | req.onreadystatechange = function() { 51 | if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) { 52 | return; 53 | } 54 | callback(req.responseText); 55 | }; 56 | if (req.readyState === 4) { 57 | return; 58 | } 59 | req.send(null); 60 | }, isUnsupportedMediaQuery = function(query) { 61 | return query.replace(respond.regex.minmaxwh, "").match(respond.regex.other); 62 | }; 63 | respond.ajax = ajax; 64 | respond.queue = requestQueue; 65 | respond.unsupportedmq = isUnsupportedMediaQuery; 66 | respond.regex = { 67 | media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi, 68 | keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi, 69 | comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi, 70 | urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, 71 | findStyles: /@media *([^\{]+)\{([\S\s]+?)$/, 72 | only: /(only\s+)?([a-zA-Z]+)\s?/, 73 | minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/, 74 | maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/, 75 | minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi, 76 | other: /\([^\)]*\)/g 77 | }; 78 | respond.mediaQueriesSupported = w.matchMedia && w.matchMedia("only all") !== null && w.matchMedia("only all").matches; 79 | if (respond.mediaQueriesSupported) { 80 | return; 81 | } 82 | var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName("head")[0] || docElem, base = doc.getElementsByTagName("base")[0], links = head.getElementsByTagName("link"), lastCall, resizeDefer, eminpx, getEmValue = function() { 83 | var ret, div = doc.createElement("div"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false; 84 | div.style.cssText = "position:absolute;font-size:1em;width:1em"; 85 | if (!body) { 86 | body = fakeUsed = doc.createElement("body"); 87 | body.style.background = "none"; 88 | } 89 | docElem.style.fontSize = "100%"; 90 | body.style.fontSize = "100%"; 91 | body.appendChild(div); 92 | if (fakeUsed) { 93 | docElem.insertBefore(body, docElem.firstChild); 94 | } 95 | ret = div.offsetWidth; 96 | if (fakeUsed) { 97 | docElem.removeChild(body); 98 | } else { 99 | body.removeChild(div); 100 | } 101 | docElem.style.fontSize = originalHTMLFontSize; 102 | if (originalBodyFontSize) { 103 | body.style.fontSize = originalBodyFontSize; 104 | } 105 | ret = eminpx = parseFloat(ret); 106 | return ret; 107 | }, applyMedia = function(fromResize) { 108 | var name = "clientWidth", docElemProp = docElem[name], currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime(); 109 | if (fromResize && lastCall && now - lastCall < resizeThrottle) { 110 | w.clearTimeout(resizeDefer); 111 | resizeDefer = w.setTimeout(applyMedia, resizeThrottle); 112 | return; 113 | } else { 114 | lastCall = now; 115 | } 116 | for (var i in mediastyles) { 117 | if (mediastyles.hasOwnProperty(i)) { 118 | var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = "em"; 119 | if (!!min) { 120 | min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1); 121 | } 122 | if (!!max) { 123 | max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1); 124 | } 125 | if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) { 126 | if (!styleBlocks[thisstyle.media]) { 127 | styleBlocks[thisstyle.media] = []; 128 | } 129 | styleBlocks[thisstyle.media].push(rules[thisstyle.rules]); 130 | } 131 | } 132 | } 133 | for (var j in appendedEls) { 134 | if (appendedEls.hasOwnProperty(j)) { 135 | if (appendedEls[j] && appendedEls[j].parentNode === head) { 136 | head.removeChild(appendedEls[j]); 137 | } 138 | } 139 | } 140 | appendedEls.length = 0; 141 | for (var k in styleBlocks) { 142 | if (styleBlocks.hasOwnProperty(k)) { 143 | var ss = doc.createElement("style"), css = styleBlocks[k].join("\n"); 144 | ss.type = "text/css"; 145 | ss.media = k; 146 | head.insertBefore(ss, lastLink.nextSibling); 147 | if (ss.styleSheet) { 148 | ss.styleSheet.cssText = css; 149 | } else { 150 | ss.appendChild(doc.createTextNode(css)); 151 | } 152 | appendedEls.push(ss); 153 | } 154 | } 155 | }, translate = function(styles, href, media) { 156 | var qs = styles.replace(respond.regex.comments, "").replace(respond.regex.keyframes, "").match(respond.regex.media), ql = qs && qs.length || 0; 157 | href = href.substring(0, href.lastIndexOf("/")); 158 | var repUrls = function(css) { 159 | return css.replace(respond.regex.urls, "$1" + href + "$2$3"); 160 | }, useMedia = !ql && media; 161 | if (href.length) { 162 | href += "/"; 163 | } 164 | if (useMedia) { 165 | ql = 1; 166 | } 167 | for (var i = 0; i < ql; i++) { 168 | var fullq, thisq, eachq, eql; 169 | if (useMedia) { 170 | fullq = media; 171 | rules.push(repUrls(styles)); 172 | } else { 173 | fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1; 174 | rules.push(RegExp.$2 && repUrls(RegExp.$2)); 175 | } 176 | eachq = fullq.split(","); 177 | eql = eachq.length; 178 | for (var j = 0; j < eql; j++) { 179 | thisq = eachq[j]; 180 | if (isUnsupportedMediaQuery(thisq)) { 181 | continue; 182 | } 183 | mediastyles.push({ 184 | media: thisq.split("(")[0].match(respond.regex.only) && RegExp.$2 || "all", 185 | rules: rules.length - 1, 186 | hasquery: thisq.indexOf("(") > -1, 187 | minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""), 188 | maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || "") 189 | }); 190 | } 191 | } 192 | applyMedia(); 193 | }, makeRequests = function() { 194 | if (requestQueue.length) { 195 | var thisRequest = requestQueue.shift(); 196 | ajax(thisRequest.href, function(styles) { 197 | translate(styles, thisRequest.href, thisRequest.media); 198 | parsedSheets[thisRequest.href] = true; 199 | w.setTimeout(function() { 200 | makeRequests(); 201 | }, 0); 202 | }); 203 | } 204 | }, ripCSS = function() { 205 | for (var i = 0; i < links.length; i++) { 206 | var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; 207 | if (!!href && isCSS && !parsedSheets[href]) { 208 | if (sheet.styleSheet && sheet.styleSheet.rawCssText) { 209 | translate(sheet.styleSheet.rawCssText, href, media); 210 | parsedSheets[href] = true; 211 | } else { 212 | if (!/^([a-zA-Z:]*\/\/)/.test(href) && !base || href.replace(RegExp.$1, "").split("/")[0] === w.location.host) { 213 | if (href.substring(0, 2) === "//") { 214 | href = w.location.protocol + href; 215 | } 216 | requestQueue.push({ 217 | href: href, 218 | media: media 219 | }); 220 | } 221 | } 222 | } 223 | } 224 | makeRequests(); 225 | }; 226 | ripCSS(); 227 | respond.update = ripCSS; 228 | respond.getEmValue = getEmValue; 229 | function callMedia() { 230 | applyMedia(true); 231 | } 232 | if (w.addEventListener) { 233 | w.addEventListener("resize", callMedia, false); 234 | } else if (w.attachEvent) { 235 | w.attachEvent("onresize", callMedia); 236 | } 237 | })(this); --------------------------------------------------------------------------------