| 48 |
#define DEATTACK_DETECTED 1 |
#define DEATTACK_DETECTED 1 |
| 49 |
|
|
| 50 |
/* |
/* |
| 51 |
* $Id: crypt.c,v 1.24 2008-11-18 06:24:09 maya Exp $ Cryptographic attack |
* $Id: crypt.c,v 1.25 2008-11-21 18:54:22 doda Exp $ Cryptographic attack |
| 52 |
* detector for ssh - source code (C)1998 CORE-SDI, Buenos Aires Argentina |
* detector for ssh - source code (C)1998 CORE-SDI, Buenos Aires Argentina |
| 53 |
* Ariel Futoransky(futo@core-sdi.com) <http://www.core-sdi.com> |
* Ariel Futoransky(futo@core-sdi.com) <http://www.core-sdi.com> |
| 54 |
*/ |
*/ |
| 481 |
free(newbuf); |
free(newbuf); |
| 482 |
} |
} |
| 483 |
|
|
| 484 |
|
static void cArcfour_encrypt(PTInstVar pvar, unsigned char FAR * buf, |
| 485 |
|
int bytes) |
| 486 |
|
{ |
| 487 |
|
unsigned char *newbuf = malloc(bytes); |
| 488 |
|
int block_size = pvar->ssh2_keys[MODE_OUT].enc.block_size; |
| 489 |
|
|
| 490 |
|
// 事前復号化により、全ペイロードが復号化されている場合は、0バイトになる。(2004.11.7 yutaka) |
| 491 |
|
if (bytes == 0) |
| 492 |
|
goto error; |
| 493 |
|
|
| 494 |
|
if (newbuf == NULL) |
| 495 |
|
return; |
| 496 |
|
|
| 497 |
|
if (bytes % block_size) { |
| 498 |
|
char tmp[80]; |
| 499 |
|
UTIL_get_lang_msg("MSG_ARCFOUR_ENCRYPT_ERROR1", pvar, |
| 500 |
|
"Arcfour encrypt error(1): bytes %d (%d)"); |
| 501 |
|
_snprintf_s(tmp, sizeof(tmp), _TRUNCATE, |
| 502 |
|
pvar->ts->UIMsg, bytes, block_size); |
| 503 |
|
notify_fatal_error(pvar, tmp); |
| 504 |
|
goto error; |
| 505 |
|
} |
| 506 |
|
|
| 507 |
|
if (EVP_Cipher(&pvar->evpcip[MODE_OUT], newbuf, buf, bytes) == 0) { |
| 508 |
|
UTIL_get_lang_msg("MSG_ARCFOUR_ENCRYPT_ERROR2", pvar, |
| 509 |
|
"Arcfour encrypt error(2)"); |
| 510 |
|
notify_fatal_error(pvar, pvar->ts->UIMsg); |
| 511 |
|
goto error; |
| 512 |
|
|
| 513 |
|
} else { |
| 514 |
|
memcpy(buf, newbuf, bytes); |
| 515 |
|
|
| 516 |
|
} |
| 517 |
|
|
| 518 |
|
error: |
| 519 |
|
free(newbuf); |
| 520 |
|
} |
| 521 |
|
|
| 522 |
|
static void cArcfour_decrypt(PTInstVar pvar, unsigned char FAR * buf, |
| 523 |
|
int bytes) |
| 524 |
|
{ |
| 525 |
|
unsigned char *newbuf = malloc(bytes); |
| 526 |
|
int block_size = pvar->ssh2_keys[MODE_IN].enc.block_size; |
| 527 |
|
|
| 528 |
|
// 事前復号化により、全ペイロードが復号化されている場合は、0バイトになる。(2004.11.7 yutaka) |
| 529 |
|
if (bytes == 0) |
| 530 |
|
goto error; |
| 531 |
|
|
| 532 |
|
if (newbuf == NULL) |
| 533 |
|
return; |
| 534 |
|
|
| 535 |
|
if (bytes % block_size) { |
| 536 |
|
char tmp[80]; |
| 537 |
|
UTIL_get_lang_msg("MSG_ARCFOUR_DECRYPT_ERROR1", pvar, |
| 538 |
|
"Arcfour decrypt error(1): bytes %d (%d)"); |
| 539 |
|
_snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, bytes, block_size); |
| 540 |
|
notify_fatal_error(pvar, tmp); |
| 541 |
|
goto error; |
| 542 |
|
} |
| 543 |
|
|
| 544 |
|
if (EVP_Cipher(&pvar->evpcip[MODE_IN], newbuf, buf, bytes) == 0) { |
| 545 |
|
UTIL_get_lang_msg("MSG_ARCFOUR_DECRYPT_ERROR2", pvar, |
| 546 |
|
"Arcfour decrypt error(2)"); |
| 547 |
|
notify_fatal_error(pvar, pvar->ts->UIMsg); |
| 548 |
|
goto error; |
| 549 |
|
|
| 550 |
|
} else { |
| 551 |
|
memcpy(buf, newbuf, bytes); |
| 552 |
|
|
| 553 |
|
} |
| 554 |
|
|
| 555 |
|
error: |
| 556 |
|
free(newbuf); |
| 557 |
|
} |
| 558 |
|
|
| 559 |
|
|
| 560 |
|
|
| 561 |
static void c3DES_encrypt(PTInstVar pvar, unsigned char FAR * buf, |
static void c3DES_encrypt(PTInstVar pvar, unsigned char FAR * buf, |
| 785 |
| (1 << SSH2_CIPHER_BLOWFISH_CBC) |
| (1 << SSH2_CIPHER_BLOWFISH_CBC) |
| 786 |
| (1 << SSH2_CIPHER_AES128_CTR) |
| (1 << SSH2_CIPHER_AES128_CTR) |
| 787 |
| (1 << SSH2_CIPHER_AES192_CTR) |
| (1 << SSH2_CIPHER_AES192_CTR) |
| 788 |
| (1 << SSH2_CIPHER_AES256_CTR); |
| (1 << SSH2_CIPHER_AES256_CTR) |
| 789 |
|
| (1 << SSH2_CIPHER_ARCFOUR); |
| 790 |
} |
} |
| 791 |
|
|
| 792 |
sender_ciphers &= cipher_mask; |
sender_ciphers &= cipher_mask; |
| 1293 |
break; |
break; |
| 1294 |
} |
} |
| 1295 |
|
|
| 1296 |
|
case SSH2_CIPHER_ARCFOUR: |
| 1297 |
|
{ |
| 1298 |
|
struct Enc *enc; |
| 1299 |
|
|
| 1300 |
|
enc = &pvar->ssh2_keys[MODE_OUT].enc; |
| 1301 |
|
cipher_init_SSH2(&pvar->evpcip[MODE_OUT], |
| 1302 |
|
enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher), |
| 1303 |
|
enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher), |
| 1304 |
|
CIPHER_ENCRYPT, |
| 1305 |
|
get_cipher_EVP_CIPHER(pvar->crypt_state.sender_cipher), |
| 1306 |
|
pvar); |
| 1307 |
|
//debug_print(10, enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher)); |
| 1308 |
|
//debug_print(11, enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher)); |
| 1309 |
|
|
| 1310 |
|
pvar->crypt_state.encrypt = cArcfour_encrypt; |
| 1311 |
|
break; |
| 1312 |
|
} |
| 1313 |
|
|
| 1314 |
case SSH_CIPHER_3DES:{ |
case SSH_CIPHER_3DES:{ |
| 1315 |
c3DES_init(encryption_key, &pvar->crypt_state.enc.c3DES); |
c3DES_init(encryption_key, &pvar->crypt_state.enc.c3DES); |
| 1316 |
pvar->crypt_state.encrypt = c3DES_encrypt; |
pvar->crypt_state.encrypt = c3DES_encrypt; |
| 1410 |
break; |
break; |
| 1411 |
} |
} |
| 1412 |
|
|
| 1413 |
|
case SSH2_CIPHER_ARCFOUR: |
| 1414 |
|
{ |
| 1415 |
|
struct Enc *enc; |
| 1416 |
|
|
| 1417 |
|
enc = &pvar->ssh2_keys[MODE_IN].enc; |
| 1418 |
|
cipher_init_SSH2(&pvar->evpcip[MODE_IN], |
| 1419 |
|
enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher), |
| 1420 |
|
enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher), |
| 1421 |
|
CIPHER_DECRYPT, |
| 1422 |
|
get_cipher_EVP_CIPHER(pvar->crypt_state.sender_cipher), |
| 1423 |
|
pvar); |
| 1424 |
|
|
| 1425 |
|
//debug_print(12, enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher)); |
| 1426 |
|
//debug_print(13, enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher)); |
| 1427 |
|
|
| 1428 |
|
pvar->crypt_state.decrypt = cArcfour_decrypt; |
| 1429 |
|
break; |
| 1430 |
|
} |
| 1431 |
|
|
| 1432 |
case SSH_CIPHER_3DES:{ |
case SSH_CIPHER_3DES:{ |
| 1433 |
c3DES_init(decryption_key, &pvar->crypt_state.dec.c3DES); |
c3DES_init(decryption_key, &pvar->crypt_state.dec.c3DES); |
| 1434 |
pvar->crypt_state.decrypt = c3DES_decrypt; |
pvar->crypt_state.decrypt = c3DES_decrypt; |
| 1520 |
return "AES192-CTR"; |
return "AES192-CTR"; |
| 1521 |
case SSH2_CIPHER_AES256_CTR: |
case SSH2_CIPHER_AES256_CTR: |
| 1522 |
return "AES256-CTR"; |
return "AES256-CTR"; |
| 1523 |
|
case SSH2_CIPHER_ARCFOUR: |
| 1524 |
|
return "ARCFOUR"; |
| 1525 |
|
|
| 1526 |
default: |
default: |
| 1527 |
return "Unknown"; |
return "Unknown"; |