Рефераты. Несанкционированный доступ к терминалам серверов с операционными системами семейства UNIX. На примере octopus.stu.lipetsk.ru p>( Недостаточные идентификация и аутентификация

В базовых протоколах обмена идентификация и аутентификация объектов практически отсутствуют. Так, например, в прикладных протоколах . FTP,
TELNET, РОРЗ имена и пароли пользователей передаются по сети в виде открытых незашифрованных сообщений.

( Использование нестойких алгоритмов идентификации объектов при создании виртуального TCP-соединения

Как уже подчеркивалось, протокол TCP является единственным базовым протоколом транспортного уровня, в функции которого заложена защита соединения. Однако использование простейшего алгоритма идентификации объектов при создании виртуального TCP-канала, особенно при условии применения в сетевых ОС простейших времязависимых законов генерации TCP- идентификаторов (ISN), сводит на нет все попытки обеспечения идентификации канала и объектов при их взаимодействии по протоколу TCP.


( Отсутствие криптозащиты сообщений

В существующих базовых протоколах семейства TCP/IP, обеспечивающих взаимодействие на сетевом и транспортном уровнях, не предусмотрена возможность шифрования сообщений, хотя очевидно, что добавить ее в протокол
TCP не составляло труда. Разработчики решили переложить задачу криптозащиты на протоколы более высоких уровней, например прикладного уровня. При этом базовые протоколы прикладного уровня (FTP, TELNET, HTTP и др.) также не предусматривали никакого шифрования сообщений. Только не так давно появился общедоступный прикладной протокол SSL, встроенный в Netscape Navigator, позволяющий как надежно зашифровать сообщение, так и подтвердить его подлинность. В заключение хотелось бы заметить, что все описанные выше причины, по которым возможна успешная реализация угроз безопасности РВС, делают сеть Internet небезопасной. А следовательно, все пользователи сети могут быть атакованы в любой момент.

Подведем итоги.
Учитывая все вышесказанное, я думаю, что студентам кафедры АСОИУ уже сейчас не представляется никакой сложности для несанкционированного доступа к терминалам серверов с правами администраторов (причем это не необоснованное высказывание). Другой вопрос – целесообразности всего этого.
Я думаю что не стоит проверять все вышесказанное на практике в целях своей же безопасности.

В целом, вычислительная сеть университета администрируется весьма неплохо, нужно отдать должное системным администраторам. На серверах стоят последние версии операционных систем. Однако на chuck.stu.lipetsk.ru почему- то у обычных пользователей нет прав на компилирование Си программ. Почему?
Может это и есть слабое звено в администрировании, или это еще одна предосторожность администратора? Хотя на tomcat.am.lstu обычным смертным разрешено…

Вообще-то взлом octopus.stu.lipetsk.ru был бы неуважением своей же кафедры. Ведь та защита которая там присутствует направлена не для того, чтобы предотвратить проникновение злоумышленника, а для элементарной защиты от неопытных пользователей.

ПРИЛОЖЕНИЕ.
В целях безопасности, приводим только фрагменты программы. Файл john.c
#include
#include
#include
#include

#include "arch.h"
#include "misc.h"
#include "params.h"
#include "path.h"
#include "memory.h"
#include "list.h"
#include "tty.h"
#include "signals.h"
#include "idle.h"
#include "common.h"
#include "formats.h"
#include "loader.h"
#include "logger.h"
#include "status.h"
#include "options.h"
#include "config.h"
#include "bench.h"
#include "charset.h"
#include "single.h"
#include "wordlist.h"
#include "inc.h"
#include "external.h"
#include "batch.h"

#if CPU_DETECT extern int CPU_detect();
#endif

extern struct fmt_main fmt_DES, fmt_BSDI, fmt_MD5, fmt_BF; extern struct fmt_main fmt_AFS, fmt_LM;

extern int unshadow(int argc, char **argv); extern int unafs(int argc, char **argv); extern int unique(int argc, char **argv);

static struct db_main database; static struct fmt_main dummy_format;

static void john_register_one(struct fmt_main *format)
{ if (options.format) if (strcmp(options.format, format->params.label)) return;

fmt_register(format);
}

static void john_register_all()
{ if (options.format) strlwr(options.format);

john_register_one(&fmt_DES); john_register_one(&fmt_BSDI); john_register_one(&fmt_MD5); john_register_one(&fmt_BF); john_register_one(&fmt_AFS); john_register_one(&fmt_LM);

if (!fmt_list) { fprintf(stderr, "Unknown ciphertext format name requestedn"); error();

}
}

static void john_load()
{ struct list_entry *current;

umask(077);

if (options.flags & FLG_EXTERNAL_CHK) ext_init(options.external);

if (options.flags & FLG_MAKECHARS_CHK) { options.loader.flags |= DB_CRACKED; ldr_init_database(&database, &options.loader);

if (options.flags & FLG_PASSWD) { ldr_show_pot_file(&database, LOG_NAME);

database.options->flags |= DB_PLAINTEXTS; if ((current = options.passwd->head)) do { ldr_show_pw_file(&database, current->data);

} while ((current = current->next));

} else = DB_PLAINTEXTS; ldr_show_pot_file(&database, LOG_NAME);

return;

}

if (options.flags & FLG_STDOUT) FMT_8_BIT;

if (options.flags & FLG_PASSWD) { if (options.flags & FLG_SHOW_CHK) { options.loader.flags |= DB_CRACKED; ldr_init_database(&database, &options.loader);

ldr_show_pot_file(&database, LOG_NAME);

if ((current = options.passwd->head)) do { ldr_show_pw_file(&database, current->data);

} while ((current = current->next));

printf("%s%d password%s cracked, %d leftn", database.guess_count ? "n" : "", database.guess_count, database.guess_count != 1 ? "s" : "", database.password_count - database.guess_count);

return;

}

if (options.flags & (FLG_SINGLE_CHK | FLG_BATCH_CHK)) options.loader.flags |= DB_WORDS; else if (mem_saving_level) options.loader.flags &= ~DB_LOGIN; ldr_init_database(&database, &options.loader);

if ((current = options.passwd->head)) do { ldr_load_pw_file(&database, current->data);

} while ((current = current->next));

ldr_load_pot_file(&database, LOG_NAME);

ldr_fix_database(&database);

printf("Loaded %d password%s%s", database.password_count, database.password_count != 1 ? "s" : "", database.password_count ? "" : ", exiting..."); if (database.password_count > 1) { printf(" with "); printf(database.salt_count != 1 ? "%d" : "no", database.salt_count); printf(" different salts");

} if (database.password_count) printf(" (%s [%s])n", database.format->params.format_name, database.format->params.algorithm_name); else putchar('n');

if ((options.flags & FLG_PWD_REQ) && !database.salts) exit(0);

}
}

static void john_init(int argc, char **argv)
{
#if CPU_DETECT if (!CPU_detect()) {
#if CPU_REQ fprintf(stderr, "Sorry, %s is requiredn", CPU_NAME); error();
#endif

}
#endif

path_init(argv); cfg_init(CFG_NAME); status_init(NULL, 1); opt_init(argc, argv);

john_register_all(); common_init();

sig_init(idle_yield);

john_load();
}

static void john_run()
{ if (options.flags & FLG_TEST_CHK) benchmark_all(); else if (options.flags & FLG_MAKECHARS_CHK) do_makechars(&database, options.charset); else if (options.flags & FLG_CRACKING_CHK) { if (!(options.flags & FLG_STDOUT)) log_init(LOG_NAME); tty_init();

if (options.flags & FLG_SINGLE_CHK) do_single_crack(&database); else if (options.flags & FLG_WORDLIST_CHK) do_wordlist_crack(&database, options.wordlist,

(options.flags & FLG_RULES) != 0); else if (options.flags & FLG_INC_CHK) do_incremental_crack(&database, options.charset); else if (options.flags & FLG_EXTERNAL_CHK) do_external_crack(&database); else if (options.flags & FLG_BATCH_CHK) do_batch_crack(&database);

status_print(); tty_done(); if (!(options.flags & FLG_STDOUT)) log_done();

}
}

static void john_done()
{ path_done();

check_abort();
}

int main(int argc, char **argv)
{ char *name;

#ifdef __DJGPP__ if (--argc 4) if (!strcmp(strlwr(name) + strlen(name) - 4, ".exe")) name[strlen(name) - 4] = 0;
#endif

if (!strcmp(name, "john")) { john_init(argc, argv); john_run(); john_done();

return 0;

}

if (!strcmp(name, "unshadow")) return unshadow(argc, argv);

if (!strcmp(name, "unafs")) return unafs(argc, argv);

if (!strcmp(name, "unique")) return unique(argc, argv);

fprintf(stderr, "Sorry, I can't find myselfn"); return 1;
}
Файл des_bs.c
#include

#include "arch.h"
#include "DES_std.h"
#include "DES_bs.h"

DES_bs_combined DES_bs_all; int DES_bs_mem_saving = 0;

extern void DES_bs_body();

void DES_bs_init()
{ int index, bit;

for (index = 0; index < 0x300; index++) { bit = DES_K_bits[index]; bit -= bit >> 3;

DES_bs_all.Kp[index] = &DES_bs_all.K[55 - bit];

}
}

void DES_bs_set_salt(ARCH_WORD salt)
{ register int src, dst; register ARCH_WORD mask;

mask = 1; for (dst = 0; dst < 48; dst++) { if (dst == 24) mask = 1;

if (salt & mask) { if (dst < 24) src = dst + 24; else src = dst - 24;

} else src = dst;

DES_bs_all.E[dst] = &DES_bs_all.B[DES_E[src]];

DES_bs_all.E[dst + 48] = &DES_bs_all.B[DES_E[src] + 32];

mask > 4;

/* Swap L and R here instead of doing it one more time in DES_bs_crypt() */ index ^= 2;

/* Calculate the number of one of the 16 data bits in raw[index] */ shift = ((bit & 0xC) > shift) & 1;

if (DES_bs_mem_saving)
/* Memory saving: pack the bits into two words */ out[bit >> 5] |= value (bit & 0x1F))) & 1) return 0;

return 1;

}

mask = (ARCH_WORD)1 ;L

>;=>5 8


Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.