ЎЗБЕКИСТОН РЕСПУБЛИКАСИ АХБОРОТ ТЕХНОЛОГИЯЛАРИ ВА КОММУНИКАЦИЯЛАРИНИ РИВОЖЛАНТИРИШ ВАЗИРЛИГИ

 

ТОШКЕНТ АХБОРОТ ТЕХНОЛОГИЯЛАРИ

УНИВЕРСИТЕТИ

 

«Ахборот хавфсизлиги» кафедраси

 

Дастурий маҳсулот хавфсизлиги инжиниринги

 

фанидан

 

5А330601 – Дастурий инжиниринг магистр таълим йўналиши талабалари учун лаборатория машғулотларини бажаришга

 

УСЛУБИЙ КЎРСАТМА

 

 

 

 

 

 

 

 

 

 

 

 

Тошкент – 2015


Ушбу услубий кўрсатма ўз ичига дастурий маҳсулотларни яратишда хавфсизлик нуқтаи - назаридан ёндашиш, дастурий маҳсулотларни яратишдаги йўриқномалар ҳақидаги билим ва кўникмаларини қамрайди. Бу фанни ўқитишдан мақсад ахборот – талабаларда яратилаётган дастурий таъминотни хавфсизлик нуқта-назаридан ишлаб чиқиш, уларни хавфсизлигини турли тестлаш ва текшириш усуллари асосида таҳлиллаш, хавфсиз дастур яратиш малакаларини шакллантиришдан иборат.

Тузувчилар:

 

 

Ташев К.А.

“Компьютер инжиниринги” факултети декани, т.ф.н.

 

Худойқулов З.Т.

«Ахборот хавфсизлиги» кафедраси ассистенти

 

Тақризчилар:

 

Аҳмедова О.П.

“UNICON.UZ” ДУК, Криптография илмий-тадқиқот бўлими бошлиғи, т.ф.н.

 

 

Минглиқулов З.Б.

ТАТУ, “Ахборот технологияларининг дастурий таъминоти” кафедра мудири, т.ф.д.

 

Ушбу услубий кўрсатма “Ахборот хавфсизлиги” кафедраси мажлисида кўриб чиқилган ва маъқулланган.

(___  _________ 2015 йил _____-баённома)

 

Услубий кўрсатма “Компьютер инжиниринги” факультетининг илмий-услубий кенгашида тасдиқланган.

(___  _________ 2015 йил _____-баённома)

 

Услубий кўрсатма Тошкент ахборот технологиялари университети илмий-услубий кенгашида тасдиқланган.

(___  _________ 2015 йил _____-баённома)

 

ÓТошкент ахборот технологиялари университети, 2015 й.

1 - Лаборатория иши

Мавзу: Кириш қийматини назоратлаш

Ишдан мақсад: С++ дастурлаш тилида кириш қийматларини назоратлаш билимларига эга бўлиш.

Назарий қисм

Кириш қийматини текшириш функцияда ёки иловада фойдаланувчи томонидан киритилувчи ихтиёрий катталикни аслиги мувофиқлигини (типини ва ўлчамини) текшириш жараёнидир. Барча иловалар фойдаланувчи томонидан бирор турдаги катталикни киритишни талаб этади. Фойдаланувчи томонидан киритилувчи катталиклар турли манбалардан келиши мумкин, хусусан, таҳдидчи томонидан ҳам киритилиши мумкин. Таҳдидчи бу киритилган маълумотлар орқали дастурни аварияга учратиши, ёки ўзига керакли маълумотни қўлга киритиши мумкин. Бунга жавобан ҳар бир дастурий таъминот фойдаланувчи томонидан киритилган катталикларни текшириши шарт.

Иловаларга нотўғри маълумотни киритилиши натижасида бир қанча муаммолар ва заифликлар юзага келиши мумкин. Қуйида нотўғри киритилган кириш қиймати асосида юзага келиши мумкин бўлган заифликлар келтирилган:

ü хотиранинг тўлиб тошиши;

ü инексия таҳдидлари;

ü хизматдан вос кечиш таҳдидлари;

ü ахборотни ошкор бўлиши;

ü тизимни хавфсиз бўлмаслиги;

ü ва ҳак.

Юқоридаги таҳдидларни олдини олиш учун турли хусусиятлар бўйича текширишни амалга ошириш талаб этилади. Умумий ҳолда хавфсизлик томонидан кириш қийматларини қуйидаги хусусиятлар бўйича текшириш амалга ошириш шарт:

ü узунликга текшириш;

ü оралиқга текшириш;

ü форматга текшириш;

ü турга текшириш;

ü нолга бўлинишга текшириш.

C++ дастурлаш тилида кириш қийматларини текшириш учун бир нечта тайёр функциялардан фойдаланилади. Улар қуйидаги жадвалда келтирилган ва cctype сарлавҳасида мавжуд:

Функция

Маъноси

isalnum(int)

Рақам ёки белги бўлса нол бўлмаган қиймат қайтарилади

isalpha(int)

Белги бўлса нол бўлмаган қиймат қайтарилади

iscntrl(int)

Бошқарувчи белги бўлса нол бўлмаган қиймат қайтарилади

isdigit(int)

Рақам бўлса нол бўлмаган қиймат қайтарилади

isgraph(int)

Чоп этилувчи белги бўлса нол бўлмаган қиймат қайтарилади (пробелсиз)

isprint(int)

Чоп этилувчи белги бўлса нол бўлмаган қиймат қайтарилади (пробел билан)

ispunct(int)

Рақам – белги ёки пробел бўлса нол бўлмаган қиймат қайтарилади

isspace(int)

Пробел белгиси бўлса нол бўлмаган қиймат қайтарилади

isxdigit(int)

Ўн олтилик саноқ системасидаги рақамлар (0-9, a-f, A-F) бўлса нол бўлмаган қиймат қайтарилади

Ишни бажарилиш тартиби ва қўйилган вазифа

1.     Қуйида содда чиқариш дастури келтирилган. Масалан,ffff киритилса, чиқиш қуйидагига тенг бўлади: “Enter choice: Enter choice: Enter choice: Enter choice: “ Агар киришfffга тенг бўлса чиқиш уч марта «Enter choice: » га тенг бўлади. Тўғри киришни таъминлаш шартМуаммо ҳал этилсин.

char choice_fun()

{

    char choice;

    do{

         cout << "Enter choice: ";

         cin >> choice;

         }while(choice != 'A' && choice != 'B' && choice != 'C');

    return choice;

}

2.     Фойдаланувчи исмини текширувчи содда дастур ёзинг (катта, кичик ҳарфлар, белгилар ва пробел).

3.     Телефон рақамининг халқаро форматда бўлиши текширилсин (+998 хх ххх хх хх).

4.     Почта манзилини тўғри киритилганлигини текширувчи содда дастур ёзилсин.

5.     Киритилган паролни “яхши”лиги текширилсин (камида битта катта ҳарф, камида битта махсус белги (_,-,), камида битта рақам ва кичик ҳарфлар ва пароль махсус белги ва рақамдан бошланмаслиги шарт).

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1.     Киришларга асосланган таҳдидларнинг умумий моҳияти.

2.     Сон туридаги киришга асосланган таҳдид.

3.     Қатор туридаги киришга асосланган таҳдид.

4.     С++ тилида киришлар асосида таҳдидни олидини олиш усуллари.

 

Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.


2-Лаборатория иши

Мавзу: Хотиранинг тўлиб тошиш таҳдиди

Ишдан мақсад: С дастурлаш тилида хотиранинг тўлиб тошиш таҳдиди билан танишиш ва у ҳақида кўникмаларига эга бўлиш.

Назарий қисм

Амалда кўп учрайдиган дастурлаш тилларидаги камчиликлар одатда, тақиқланган форматдаги ёки ҳажмдаги маълумотлар киритилиши натижасида келиб чиқади. Бу турдаги таҳдидлар ичида кенг тарқалгани бу – хотиранинг тўлиб тошиш таҳдиди саналади.

Масалан, веб сайтда фойдаланувчидан маълумотлар киритилиши талаб этилса (исми, фамиляси, йили, ва ҳак.), фойдаланувчи томонидан киритилган “исм” майдонидаги маълумот сервердаги N та белги ҳажмига эга соҳага ёзилади. Агар киритилган маълумот узунлиги N дан катта бўлган ҳолда, хотиранинг тўлиб тошиши ҳодисаси юзага келади.

Агар бузғунчи томонидан “керакли” маълумот киритилса, бу ўз навбатида компьютерни бузулишига олиб келади.

Қуйида С дастурлаш тилида ёзилган код келтирилган бўлиб, агар бу код компиляция қилинса хотиранинг тўлиб тошиши ҳодисаси келиб чиқади.

int main()

{

int buffer [10];

buffer [20] =37;

}

Сабаби 10 байт ўлчамдаги хотиранинг 20 байтига маълумот ёзилмоқда. Бу эса хотиранинг рухсат этилмаган манзилига мурожаатни келтириб чиқаради.

Агар дастурий маҳсулот аутентификацияни таъминлаш мақсадида яратилган бўлиб, аутентификация натижаси бир бит билан ифодаланади. Агар хотиранинг тўлиб тошиши натижасида ушбу бит бузғунчи томонидан муофақиятли ўзгартирилса Триди ўзини Алиса деб таништириш имкониятига эга бўлади. Бу ҳолат қуйидаги 2.1-расмда келтирилган. Бу ерда F аутентификациядан мувафақиятли ўтилмаганлигини билдиради. Агар Триди F (0 ни) майдон қийматини Т (1 га) ўзгартирса, дастурий таъминот Тридини Алиса сифатида танийди ва унга ресурсларидан фойдаланиш имкониятини яратади (2.2 - расм).

2.1 – расм. Хотира ва мантиқий байроқ

2.2 – расм. Содда хотирани тўлиб тошиши

Хотирани тўлиб тошиш ҳодисасини чиқурроқ ўрганишдан олдин замонавий компьютернинг хотира тузилиши билан танишилиб чиқилади. Компьютер хотирасининг соддалашган кўриниши қуйидаги 2.3 – расмда келтирилган.

2.3 – расм. Хотиранинг тузилиши

Бу ерда text мадонида кодлар сақланиб, data соҳасида статик катталиклар сақланади. Help соҳаси динамик маълумотларга тегишли бўлиб, stack ни просессор учун «кераксиз қоғоз» вазифасини ўтайди. Масалан, динамик локал ўзгарувчилар, функция параметлари, функцияларнинг қайтриш манзиллари каби маълумотлар stack да сақланади. Stack pointer ёки SP эса stackни энг юқорисини кўрсатади. Расмда stackни қуйидан юқорига чиқиши ҳолати билан ифодаланган.

Stackни аварияга учратиш. Stackни аварияга учраш ҳодисаси асосан хотирани тўлиб тошиши натижасида келиб чиқади. Бу турдаги таҳдидда Триди функцияларни чақирилиши давомида stackни текширади. Функцияни чақириш давомида stackдан фойдаланиш тартиби қуйидаги кодда келтирилган.

void func(int a, int b)

{

char buffer[10];

}

void main()

{

func(l,2);

}

Қачонки func функцияси чақирилганда функциянинг параметрлари stack да итариб чиқарилади (2.4 – расм).

2.4 – расм. Stackга мисол

Бу ерда stack функцияни бажарилиши давомида buffer массивини яратиш учун фойдаланилмоқда. Бундан ташқари stack функцияни қайтарувчи, функция бажарилиб бўлинганидан кейин ўтиши керак бўлган манзилини ҳам ўзида сақлайди. Расмда кўрсатилгани каби buffer қайтувчи манзилдан (ret) дан юқорида жойлашган, яъни, қайтарулувчи манзилдан сўнг buffer stackда юкланади. Натижада, агар хотирани тўлиб тошиши юзага келса, у ҳолда хотиранинг ret соҳаси қайтадан ёзилади. Бу таҳдид натижасида олиниши мумкин бўлган, реал натижа.

Агар Триди томонидан хотира тўлдирилса ва қайтарувчи манзил тасодифий битлар билан тўлдирилса, у ҳолда дастур мавжуд бўлмаган манзилга сакрайди ва тизим аврияга учрайди (2.5-расм).

2.5 – расм. Хотиранинг тўлиб тошиш муаммоси

Бу ҳолда дастур ишини тўхтатгандан Триди хурсанд бўлиши аниқ. Агар Триди янада ақллироқ бўлса ва буферни тасодифий битлар билан эмас, балки муҳим хотира манзили билан тўлдирса ва бу хотира манзилига бирор зарарли дастур бўлса, у ҳолда жиддийроқ муаммо бўлиши аниқ (2.6 - расм).

2.6 – расм. Зарарли кодни юклаш

Бу ҳолда Триди қуйидаги икки муаммога дуч келиши мумкин. Биринчиси, Триди зараркунанда дустурни хотиранинг қайси манзилига ёзилганини билмайди. Иккинчиси эса, stackда функцияни қайтувчи манзилини аниқ билмайди.

Қуйидаги икки содда хийла натижасида, хотирани тўлиб тошиш жараёнини тезлаштириш мумкин. Биринчиси бу, зараркунанда дастур кодини хотира бўшлиқлари билан (NOP) тўлдириш бўлса, иккинчиси эса, исталган такрорланувчи қайтувчи манзилни қўйишдир (2.7 - расм).

2.7 – расм. Хотирани NOP билан тўлдириш

Бу таҳдид одатда кўплаб, дастурий маҳсулот учун керакли бўлган сериал калитларни бузишда кенг фойдаланилади.

Ишни бажарилиш тартиби ва қўйилган вазифа

1.     Дастлаб оддий дастурий кодни компьютер хотирасида акс эттирилишини қараб чиқсак. Қуйидаги код берилган бўлсин:

void foo(const char* input) {

     char buf[10];

     printf("Hello World\n");

}

Бу функция асосий функция томонидан қуйидагича фойдаланилсин:

int main(int argc, char* argv[])

{

     foo(argv[1]);

       return 0;

}

Бу ҳолда foo функцияни чақиришдан олдин ва кейинги стекни ҳолати қуйидагича бўлади:

Описание: http://www.cse.scu.edu/~tschwarz/coen152_05/Images/wk6a3.jpg

 

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1. Хотирани тўлиб тошиш таҳдидининг моҳияти нимадан иборат.

2. Хотирани тўлиб тошиш таҳдидидан ҳимоялаш учун қандай усуллардан фойдаланилади.

Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.


3-Лаборатория иши

Мавзу: SQL инекция

Ишдан мақсад: Маълумотлар баъзалари учун ўринли бўлган SQL – инекция таҳдиди билан амалда танишиб чиқиш.

Назарий қисм

SQL инексия таҳдиди маълумотлар базасига тегишли бўлган таҳдид бўлиб, SQL сўровларга тақиқланган белгиларни киритиш ва бунинг натижасида маълумотлар базасида бошқа натижа олишга қаратилган. Бу таҳдид тури энг кўп учрайдиган таҳдид тури бўлиб, унинг ҳажми йилдан – йилга ортиб бормоқда.

Содда мисол. Бу таҳдидни тушуниш учун қуйидаги содда ҳаётий мисолни келтирайлик. “Алининг отаси онасига Алига 100$ пул бериш кераклигини ёзиб  мактуб қолдирди.” Бу гапни SQL сўрови шаклида ифодаланса қуйидагича бўлади: “чўнтагимдан 100$ ОЛ ВА ҲАММАСИНИ БЕР АЛИГА”.

Қолдирилган мактубни Алининг акаси Вали кўриб қолди. Вали бўлғуси хакер бўлганлиги учун, қолдирилган мактубга “ЁКИ ВАЛИГА” деб қўшиб қўяди. 

Она келиб мактубни олади ва кеча Алига пул берганлиги учун пулни Валига беради. Бу SQL инекция таҳдидига бир ҳаётий мисол. Она қолдирилган мактубни филтерламаслик натижасида пулни Валига бериб юборди.

SQL инекциянинг 5 та асосий синфи мавжуд:

UNION query SQL injection. Ушбу тур инекциянинг классик кўриниш бўлиб, бундан сўров “UNION ALL SELECT” дан такшил топган бўлади. Бу турдаги инекция SELECT даги натижа тўғридан – тўғри қайтарилганда юзага келади.

Error-based SQL injection. Бу ҳолда сканер текшириш давомида заиф белгини алмаштириш ёки қўшган вақтда юзага келади ва маълумотларни бошқариш тизимларида хатолик юз берганда фойдаланилади.

Stacked queries SQL injection. Бу турдаги инекцияда SELECT командасидан ташқари буйруқлар (INSERT ёки DELETE) фойдаланилган ҳолда ва HTTP сўровларини текшириш жараёнида нуқтали вергул (;) билан алмаштириш содир бўлганда юзага келади.

Boolean-based blind SQL injection. Ушбу турдаги инекция “кўр” инекция деб аталиб, маълумотлар базасидан заифлик яққол кўринмаган ҳолда фойдаланилади. Бунда синтактик тўғри бўлган сўровларни киритиш орқали қайтарилган мантиқий жавобга асосланиб натижа аниқланади.

Time-based blind SQL injection. Бу тўлиқ “кўр” инекция бўлиб, унда сўровда қуйи сўров киритилади ва бу сўров маълумотлар баъзасини бошқариш тизимининг ишини бир мунча тўхтатиб туради (SLEEP() ёки BENCHMARK()).

Бу таҳдид асосан тақиқланган белгиларни текширмаслик натижасида келиб чиқади. Қуйида ушбу заифликни ўз ичига олган SQL сўрови келтирилган:

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

Бу сўровга асосан айнан керакли фойдаланувчи номи маълумотлар базасидан қидирилмоқда. Агар бу сўров бузғунчи томонидан userName ўрнига ' OR '1'='1 киритилса, қуйидиги сўров ҳосил бўлади:

SELECT * FROM users WHERE name = '' OR '1'='1';

Натижада маълумотлар базасидан барча фойдаланувчилар тўғрисидаги маълумотлар чиқарилади. Бу ерда қуйидаги тақиқланган белгилар бирикмасидан ҳам фойдаланиш мумкин.

' OR '1'='1' --
' OR '1'='1' ({
' OR '1'='1' /* 

 Бу таҳдидларни олдини олишда кирувчи сўров махсус белгиларга текширилиши керак. Аммо, бу сўровларни кундан-кунга янги турлари келиб чиқмоқда.

Сўровларни SQL инекцияга заифлигини текшириш

1.  бунинг учун маълумот базаси яратиб, унда содда жадваллар яратамиз. Масалан, “news” номли жадвал яратиб унга “id” номли устун қўшинг. Қуйидаги содда сўров жадвалдан берилган id тегишли маълумотни қайтаради.

$id = $_GET['id'];

$query = "SELECT * FROM news WHERE id=$id";

Ушбу сўров SQL инекцияга текширилмаган бўлиб, уни текшириш учун қуйидаги сўровни киритамиз:

sqlinj/index1.php?id=1'

агар ушбу буйруқ киритилганда хатолик юз берса демак заифлик мавжуд бўлади. Хатолик юз берса демак заифликга қарши текширилган ёки хатоликни кўрсатиш ўчириб қўйилган.

2. қатор киритилганда мавжуд хатоликни аниқлаш учун ҳам юқоридаги каби сўровни қатор типидаги устун учун киритиш зарур.

$user = $_GET['user'];

$query = "SELECT * FROM news WHERE user='$user'";

Қуйидаги сўровни киритиш орқали уни аниқлаш мумкин:

sqlinj/index1.php?user=hacker'

3. SQL тилида комментарияга олиш “--” белгиси билан амалга оширилади. Ушбу белгини олдидан ва орқасидан пробел бўлиши зарур. URL манзилларда пробел “%20” каби ифодаланади.

SELECT * FROM news WHERE user='hacker' -- blablabla

URL да ифодаси

sqlinj/index1.php?user=hacker'%20--%20 blablabla

4. UNION буйруғидан фойдаланиш орқали майдонлар сонини билиш мумкин.

sqlinj/index1.php?id=1 UNION SELECT 1,2

хатолик

sqlinj/index1.php?id=1 UNION SELECT 1,2,3

хатолик юқ демак устунлар сони 3 га тенг.

5. GROUP BY дан фойдаланган ҳолда устунлар сонини аниқлаш.

sqlinj/index1.php?id=1 GROUP BY 2

Ишни бажарилиш тартиби ва қўйилган вазифа

1.            Мантиқий “кўр” инекцияни яратиш. Бунинг учун Owaspweb Goat симуляторидан фойдаланилади.

Дастлаб сиқилган файлни очинг

–Run webgoat.bat (or webgoat_8080.bat)

–http://localhost/WebGoat/attack

–Id = guest

–pw = guest

Вазифа

// first_name катталининг узунлиги 6 га тенг

// биринчи ҳарфи ‘J’ га тенг

101 and ((select ascii(substr(first_name,1,1)) from user_data where userid = 15613) >= 74) and ((select ascii(substr(first_name,1,1)) from user_data where userid = 15613) <= 74)

Юқоридаги сўровдан фойдаланиб, 15613 рақамли фойдаланувчини first_name ни топинг.

2.            Қаторли SQL инекция. Бу вазифа учун ҳам Owaspweb Goat симуляториидан фойдаланилади.

-         Файл очилади

–Run webgoat.bat (or webgoat_8080.bat)

–http://localhost/WebGoat/attack

–Id = guest

–pw = guest

-         “Tamper Data” плагини Mozilla Firefox учун ўрнатилади ва “Tools” менюси орқали синаб кўрилади.

-         Шундан сўнг “Injection flaws”à”Lab: SQL injection”à”Stage 1:String SQL Injection” танланади.

-         Бу саҳифадан вазани аниқланг ва Mozilla Firefox нинг “Tools” менюсидан “Tamper Data” бандини танлаб “Start Tamper”тугмасини босинг.

-         webgoat муҳитидан “Neville Bartholomew (admin)” логин сифатида танлаб, парол бандиги очиқ қолдириб Login тугмасини босинг. Қуйидаги ойна кўринади.

3.1 – расм. Tamper Data ойнаси

-         Бу ойнадан сиз парол соҳаси бўшлигини кўришингиз мумкин ва бу ерда SQL инекцияга олиб келувчи кодни киритинг.

-         Таҳдидни амалга ошириш орқали ('Neville') қайд ёзувига тўғри паролни билмасдан кириб кўринг.

Фойдаланган SQL – сўровни ҳисоботга қайд этинг.

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1.     SQL инекция нима ва унинг турлари.

2.     Қандай қилиб бу таҳдиддан ҳимояланиш мумкин.

3.     Бу турдаги таҳддилар жиддийми.

 

Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.

 


4 - Лаборатория иши

Мавзу: Тезкор мурожаат шарти таҳдиди (Race condition)

Ишдан мақсад: C++ дастурлаш тилида Тезкор мурожаат шарти таҳдиди билан танишиб чиқиш.

Назарий қисм

Race condition ёки race hazard). Бу дастурий маҳсулотнинг ёки электрон тизимнинг ўзини тутиш ҳолати бўлиб, чиқиш қиймати бошқариб бўлмас бошқа ҳодисалар кетма-кетлиги ёки вақтига боғлиқ бўлади. Дастурлашда бу ҳолда хатолик юзага келиб, иккита сигнал биринчи чиқиш учун ҳаракат қилади. Бу ҳодиса асосан, дастурлашда параллел ҳисоблашда (thread) юзага келади.

4.1 – расм. Тезкор мурожаатда ҳаётий мисол

Уч турдаги мустақил оқимлар бўлиши мумкин:

-         Оқимлар (thread);

-         Жараёнлар;

-         Вазифалар.

Ушбу ҳодисанинг юзага келиши учун уч турдаги хусусият мавжуд:

-         Конкуренциянинг мавжудлиги. Камида иккита оқим амалга оширилган бўлиши шарт;

-         Тақсимланган объект. Тақсимланган объектлар барча конкурент оқимлар томонидан бошқарилиши шарт;

-         Ҳолатни ўзгариши. Камида битта оқим тезкор мурожаатни амалаг ошириши шарт.

Қуйида иккита оқим томонидан ўз қийматини бирга ошириш учун бажарган тезкор мурожати келтирилган. Агар тизим тўғри ишлаганда қуйидаги натижа олиниши шарт эди.

Thread 1

Thread 2

Integer value

0

read value

0

increase value

0

write back

1

read value

1

increase value

1

write back

2

 

 Аммо, тезкор мурожаат натижасида қуйидаги ҳолат келиб чиқди:

Thread 1

Thread 2

Integer value

0

read value

0

read value

0

increase value

0

increase value

0

write back

1

write back

1

Бу таҳдид мавжуд дастурий маҳсулотларда  time-of-check-to-time-of-use (TOCTTOU) заифлиги мавжуд бўлади.

Муаммо бирор оқим “check-then-act” ни амалга ошириш вақтида (масалан, "check" агар X бирор катталикга тенг бўлса, у ҳолда "act" X билан боғлиқ бирор амал) ва бошқа бир оқим бу қийматга "check" ва "act" оралиғига таъсир қилади. Масалан:

if (x == 5) //"Check"

{

   y = x * 2; //"Act"

   // агар бошқа бирор оқим x ни "if (x == 5)" ва "y = x * 2" оралиғида ўзгартирса

   // y катталик 10 га тенг бўлмайди.

}

Одатда бу таҳдидларни олдини олишда дастурлаш тилларида глобал ўзгарувчини қулфлаб қўйиш усулларидан фойдаланилади.

// x учун қулфлашни амалга ошириш

if (x == 5)

{

y = x * 2; // қулфлаш олиб ташлагмагунга қадар бошқа оқим томонидан ўзгартириб бўлмайди

              // Шунинг учун y = 10

}

// x ни қулфдан озод этиш

Ишни бажарлиш тартиби ва қўйилган вазифа

Қуйида оқимдан фойдаланган ҳолда ва асосий функция ичида чоп этиш буйруғидан фойдаланилиб, қийматлар чоп этилган код берилган:

#include <iostream>

#include <thread>

void thread_function()

{

    for (int i = -100; i < 0; i++)

         std::cout << "thread function: " << i << "\n";

}

int main()

{

    std::thread t(&thread_function);

    for (int i = 0; i < 100; i++)

         std::cout << "main thread: " << i << "\n";

    t.join();

    return 0;

}

Натижадан кўриниб турибдики, бу ҳолда тартиб бузилган.

Бу ҳолатни олдини олиш учун C++ дастурлаш тилида mutex: функциясидан фойдаланилади ва у билан чоп этиш буйруғи қулфланади:

#include <iostream>

#include <thread>

#include <mutex>

#include <string>

std::mutex mu;

void shared_cout(std::string msg, int id)

{

    mu.lock();

    std::cout << msg << ":" << id << std::endl;

    mu.unlock();

}

void thread_function()

{

    for (int i = -100; i < 0; i++)

         shared_cout("thread function",i);

}

int main()

{

    std::thread t(&thread_function);

    for (int i = 0; i < 100; i++)

         shared_cout("main thread", i);

    t.join();

    return 0;

}

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1.     Тезкор мурожаат шарти ҳолати нима ?

2.     Race conditionдан қандай ҳимояланиш мумкин (С ва С++).

3.     Ҳар бир қарши ҳимоя усулини мисоллар орқали тушунтиринг.

4.     Deadlock нима ва у қайси вақтда келиб чиқади.

Изоҳ: ҳар бир назорат саволларига ёзма жавоб берилсин.

Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.

 


5 - Лаборатория иши

Мавзу: Дастурлаш тилига асосланган хавфсизлик

Ишдан мақсад: Java дастурлаш тилида хавфсиз дастурлаш йўриқномалари билан танишиб чиқиш.

Назарий қисм

Изоҳлаш тиллари энг юқори даражали тиллар ҳисобланади. Кўплаб дастурчилар айнан шу тиллардан, С#, Perl, .Net ва Javaф ойдаланадилар. Бу тиллардан ёзилган кодлар машина тилига компиляция этилмайди, балки байткодларда ўтказилади. Байткодлар дастурий кодларни оралиқ ифодаланиши бўлиб, интерпритаторлар орқали машина кодига айлантирилади.

Java дастурлаш тилида барча дастлабки кодлар аввал .javа кенгайтма билан тугайдиган очиқ текс файлда ёзилади. Ушбу файлдаги код интерпритатор орқали .class кенгайтмали файлга ўтказилади. Ушбу файл процессорда табий бўлган кодлардан эмас, балки  Java Вертуал машинасининг (Java VM) тили байткодлардан иборат бўлади. Шундан сўнг жавани ишга тушурувчи қурилма сизнинг илова – дастурингизни Java вертуал машинасида ишга туширади (5.1 - расм).

Описание: Описание: java_steps

5.1 – расм. Дастурий таъминотни юклашнинг умумий кўриниши

Қуйида Java дастурлаш тилида ёзилган содда дастурий код келтирилган:

* HelloWorld.java

 */

public class HelloWorld

{

             public static void main(String[] args) {

                  System.out.println("Hello World!");

             }

}

Ҳосил бўлган .class файлни турли операцион тизимларда юклаш имкони бўлганлиги учун, Java дастурлаш тили кўп платформали тил ҳисобланади:

Описание: Описание: java_for_os

5.2 – расм. Javaни кўп платформаларда фойдаланилиши

Java платформаси

Платформа бу – ускунавий ёки дастурий таъминот муҳити бўлиб, унда дастур ишга туширилади. Платформа сифатида кўп ҳолларда Microsoft Windows, Linux, Solaris OS ва Mac OS лар тушинилади. Java платформаси эса, бошқа кўпчилик платформалардан фақат дастурий таъминотдан иборатлиги билан ажралиб туради ва бошқа қурилмавий платформаларда ишлай олади.

Java платформаси икки таркибий қисмдан иборат:

         Java вертуал машинаси;

         Java дастурлаш илова интерфейси.

Java вертуал машинаси Java платформаси учун асос саналиб, турли қурилмавий платформаларда осон кўчиб ўта олади.

”API” кўплаб қулайликларни таъминлаш имкониятига эга дастурий пакетлар тўплами. Дастурчи ушбу пакетлардан фойдаланилган ҳолда ўзининг дастурий таъминотини яратади.

Описание: Описание: hardware_based

5.3 – расм. API ва Java вертуал машинаси дастурни асос қурилмадан ажратиб туради

Бу тизим ўз навбатида жараённи секинлашишига сабаб бўлади. Аммо ҳозирда вертуал машиналар соҳасидаги ривожланишлар буларни камайтиради.

Java хавфсизлик фреймворки

Стандарт Java платформаси (компилятор, байткод текширувчиси, реал вақт тизими) қуйидаги қоидалар асосида лойихалаштирилган:

         класс азоларини бошқаришда (private, protected, ва public калит сўзлар орқали)  қатий риоя этади;

         дастур ўзбошимчалик билан хотира манзилларига сакрамайди (кўрсатикичлар мавжуд эмас);

         final деб эълон қилинган катталиклар ўзгартирилмайди;

         ўзгрувчиларни эълон қилинмасдан олдин фойдаланиш мумкин эмас;

         масивларни бошқаришда дастлаб уларни чэгаралари текширилади;

         бир турдаги объэктлар ўзбошимчалик билан бошқа турга ўтказилиши мумкин эмас.

         Кодларни дубликат қилиш натижасида кўплаб муаммолар келиб чиқиши мумкин;

Бундан ташқари бошқаришни назоратлашда махсус усуллардан фойдаланади.

Имтиёзли кодлар

Javaнинг рухсатни бошқариш тизими ресурслардан рухсат этилмаган тарзда фойдаланишни ҳимоялайди.  Бунинг содда усули эса уларга имтиёзлар бериш. Фақат ресурсдан фойдаланиш имкониятига эга фойдаланувчигина (дастур) ундан фойдаланиш мумкин. Имтиёзга эга бўлмаган дастур эса тизим томонидан блокланади. Имтиёзга эга блоклар ўз навбатида тизимни хавфсиз ишлашига, рухсат этилмаган амалларни бажарамасликка катта ёрдам беради. Ҳар бир имтиёзга эга кодлар ўзи билан тизимга таваккалчиликни олиб келиши мумкин. Шуннинг учун имтиёзга эга кодлардан имкони борича камроқ фойдаланиш тавсия этилади.

Имтиёзга эга кодларда хатолик бўлганда, бу катта хавфсизлик муаммосини олиб келиши мумкин. Шунинг учун имтиёзга эга кодлардан тизимда фойдаланишдан олдин, улар аудитланиши шарт. Шунинг учун имтиёзга эга кодлар ичидаги ҳар бир ўзгарувчи текширилиши шарт. Бунга мисол қилиб қуйидаги кодни киритиш мумкин:

public static String getProp(final String name)

{

return (String) AccessController.doPrivileged(new

PrivilegedAction()

{

public Object run()

{

// 'name' is tainted, beware!

Return System.getProperty(name);

} // end method

} // end constructor

}

Юқоридаги мисолда public тоифасидаги метод берилган бўлиб, name имтиёз текширилмасдан туриб берилмоқда. Бу эса ўз навбатида ихтиёрий фойдаланувчи томонидан бажарилиши мумкинлигини  билдиради.

Бундан ташқари қуйидагилар тавсия этилади:

         final public static бўлмаган типлардан фойдаланишни чеклаш;

         имкони борича методлар кўламини камайтириш (имкони борича камроқ public мақомига эга ўзгарувчи ва методлардан фойдаланиш);

         махфий маълумотларга эга бўлган ички ўзгарувчан объектларга ҳеч қачон цилка қайтармаслик;

         ҳеч қачон тўридан-тўғри фойдаланувчи тақдим этган ўзгарувчан объектларни сақламанг;

         фойдаланувчи кутубхоналардан фойдаланишдан олдин, уларни текшириш талаб этилади;

         махфий маълумотларни асосий хотирадан тазалаб ташланг;

       махфий маълумотларни сақлашда (паролларни, шифрлаш калитлари) ўзгурвчан катталиклардан фойдаланинг. Масалан, паролларни сақлашда String ўрнига StringBuffer объектларидан фойдаланиш тавсия этилади.

Java дастурлаш тилида хавфсиз код ёзишда керакли бўладиган 12 та қоида [Gary Mcgraw and Edward Felten]:

1.     Иницализацияга боғланиб қолманг (initialization). Объектларни иницализация қилмасдан фойдаланиш керак. Агар объект ичини назоратлаш керак бўлганда get/set усулларидан фойдаланинг.

2.     Класслар, методлар ва ўзгарувчиларга бошқаришни чекланг. Ҳар бир объектга private имтиёзи одатий ҳолатда бўлади ва фақатгина керак бўлганда public имтиёзидан фойдаланинг.

3.     Барча катталикларни final даражасида эълон қилинг.

4.     Пакетлар имкониятига ишониб қолманг. Пакетлар одатда Java дастурлаш тилида фойдаланилган тақдирда ёпилмайди. Бундан ташқари пакетларни ёпиқ бўлиши фойдаланувчи учун ноқулайлик келтиради.

5.     Ички (inner) класслардан фойдаланманг. Баъзида ички класс ташқи класс томонидан ёпилади дейилади. Аммо, бу тўғри эмас. Java байт кодида ички класс деган тушунча мавжуд эмас ва у компиляция вақтида одатий классга айлантирилади. Бунинг натижасида ички класс орқали ташқи классни назоратлаш мумкин.

6.     Имтиёзга эга кодлардан сақланинг. Агар код бирор имтиёзга эга бўлмаса юкланганда бирор махсус имтиёзсиз юкланади ва аниқки кутиладиган зарар ҳам шунга яраша кичик бўлади. Имкони борича имтиёзга эга бўлган кодлардан камроқ фойдаланинг.

7.     Агар бирор кодга имзо қўйиш керак бўлса, уларни барчасини бир архив файл ичига жойлаштиринг.

8.     Классларни клонлаштириб бўлмайдиган қилиб яратинг. Javaдаги клонлаш имконияти орқали таҳдидчи ихтиёрий объектнинг тимсолини осонлик билан яратиши мумкин. Қуйида клонлаштириб бўлмайдиган кодларни яратишга мисол келтирилган:

public final void clone() throws java.lang.CloneNotSupportedException {

        throw new java.lang.CloneNotSupportedException();

}

9.     Классларни nonserializeable шаклида яратинг. (Сериализация бу - объект ҳолатини байтлар кетма – кетлигида сақлаш). Бу имконият таҳдидчига сизнинг обектингиз ички ҳолати устида баъзи имкониятларни яратади. Ундан ҳимояланиш учун қуйидаги коддан фойдаланиш мумкин:

private final void writeObject(ObjectOutputStream out)

throws java.io.IOException {

        throw new java.io.IOException("Object cannot be serialized");

}

10.                        Классларни  nondeserializeable шаклида яратинг. (Десериализация бу – сақланган байт коддан обектни тиклаш). Юқоридаги каби бу ҳолат ҳам хавфли бўлиб, ундан ҳимояланиш учун қуйидаги коддан фойдаланинг:

private final void readObject(ObjectInputStream in)

throws java.io.IOException {

        throw new java.io.IOException("Class cannot be deserialized");

}

11.                        Классларни исми бўйича таққосламанг. Баъзида классларни таққослаш талаб этилади ва одатда улар исми бўйича таққосланади. Бу эса ўз навбатида ноқулайликни олиб келади. Сабаби JVM да турли классларни исмлари бир хил бўлади.

Нотўғри усул:

if(obj.getClass().getName().equals("Foo"))   // Wrong!

        // objects class is named Foo

}else{

        // object's class has some other name

}

Тўғри усул:

if(obj.getClass() == this.getClassLoader().loadClass("Foo")){

        // object's class is equal to the class that this class calls "Foo"

}else{

        // object's class is not equal to the class that

   // this class calls "Foo"

}

 Коднинг ичида махфий ахборотни ҳимояламанг. Коднинг ичида сақланган махфий ахборотни (масалан, криптографик калитни) ихтиёрий одам юкланган вақтда билиши мумкин.

Ишни бажарилиш тартиби ва қўйилган вазифа

1.       Ихтиёрий Java дастурлаш тилида ёзилган кодни компиляцилаш имкониятига эга дастурий маҳсулотни ўрнатинг (масалан, Eclipse, NetBeans, IDEA ва ҳак).

2.       Қуйидаги дастурий кодни киритинг ва методларни чақириш билан танишинг.

/* CallingMethodsInSameClass.java
 *
public class CallingMethodsInSameClass
{
      public static void main(String[] args) {
           printOne();
           printOne();
           printTwo();
      }
      public static void printOne() {
           System.out.println("Hello World");
      }
      public static void printTwo() {
           printOne();
           printOne();
      }
 }

3.       Қуйидаги жадвалдан фойдаланган ҳолда методларни бошқариш усулларидан фойдаланишни ўрганинг. Уларни тўғрилигини мисоллар асосида исботланг.

Имтиёз

Class

Package

Subclass

Public

Y

Y

Y

Protected

Y

Y

Y

Private

Y

N

N

 

Юқорида келтирилган 12 та қоидани амалий қўллаган ҳолда кўникмаларга эга бўлинг.

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1.       Юқори ва қуйи дастурлаш тиллари.

2.       Java дастурлаш тилининг имкониятлари.

3.       Java дастурлаш тилида хавфсиз дастурий таъминотни яратиш.

Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.

 

 


6-Лаборатория иши

Мавзу: VCGen билан дастурий маҳсулотларни текшириш

Ишдан мақсад: Java дастурлаш тилида OpenJMLдан фойдаланган ҳолда дастурий кодларни текшириш.

Назарий қисм

Дастурий таъминот текширувчилари (program verification) – дастур қаноатлантирган баъзи хусусиятларнинг математик тасдиғини амалга оширади. Яъни, кириши мумкин бўлган кириш қийматлар, барча бўлиши мумкин бўлган оқимлар ва ҳак. Саноатда тестлаш одатда текшириш каби маълум. Сабаби, тестлашда баъзи ҳолатлар учун дастурий таъминот юкланиб кўрилади. Бу жараён кам вақт талаб этсада, тўлиқ текширишни амалга оширмайди.

VCGen (Verification condition generation) билан дастурни текшириш. Одатда кўплаб стандарт дастурларни текширишда VCGen дан фойдаланилади:

-         Дастур хусусиятлар билан изоҳланади;

-         VCGen текшириш шартлари деб аталувчи мантиқий хусусиятларни (specification) генерация қилади;

-         Агар бу текшириш шартлари тўғри бўлса, изоҳлар (annotation) тўғри ва хусусиятлар дастурни қаноатлантиради.

VCGen ёрдамида текширишга қуйидаши мисол берилган:

Ушбу мисолни VCGen билан текшириш қуйидагича амалга оширилади:

-           График кўринишда

-                Тасдиқларни қўшиш

-                Текшириш ҳолатларини ҳосил қилиш ва текшириш

Haore учлиги. Бу учлик қуйидагича ифойдаланади: { P } S { Q }. Бу ерда S – буйруқ, P – дастлабки шарт – S буйруқ бажарилгунга қадар ҳолат ва Q буйруқ бажарилгандан кейинги ҳолат – кейинги шарт.

Бирор хатолик юз бермаган ҳолда P ҳолатда Q ҳолатга ўтиш бажарилади. Ушбу учлигга мисол:

ü {a = 2} b := a + 3; {b > 0}

ü {a = 2} b := a + 3; {b = 5}

ü {a > 3} b := a + 3; {a > 0}

ü {a = 2} b := a * a; {b > 0}

Ушбу учликга асосланган VCC воситаси С кодларни таҳлиллаш учун Visual Studio дастурий пакетида фойдаланилади (онлайн - http://rise4fun.com/Vcc/hello). Java дастурлаш тиллари учун эса Java Modeling Language (JML)дан фойдаланилади.

Ишни бажарилиш тартиби ва қўйилган вазифа

JML оддий Java дастурлаш тилларида ёзилган кодларда изоҳлар қўшиш орқали текширишни амалга оширади. JML изоҳлари Java изоҳларидан фарқли //@ <JML specification> ёки /*@ <JML specification> @*/ кўринишда қўйилади.

Асосий JML нинг калит сўзлари қуйидагидан иборат:

requires – усулнинг дастлабки шартини ифодалаш

ensures – усулнинг кейинги шартини ифодалаш

signals -  берилган кутилма усул томонидан қайтарилган ҳолдаги кейинги шартни ифодалайди.

signals_only – дастлабки шартлар бажарилган вақтда қандай кутилмалар (Exception) қайтарилишини кўрсатади.

assignable – усул томонидан қайси соҳа қўйилганлигини аниқлайди.

invariant – класснинг инвараиантлик хусусиятини ифодалайди.

loop_invariant – цикл учун цикл инварантини ифойдалайди.

alsoхусусиятарни бирлаштириш учун фойдаланилади.

assert - JML assertion ни аниқлайди.

spec_public - protected ёки private ни аниқлайди.

Қуйида JMLTest.java номли файлда JML изоҳларни қўйиш келтирилган:

public class JMLTest {

    public static final int MAX_BALANCE = 100;

   

    /*@ public invariant balance < MAX_BALANCE;

      @*/

    private /*@ spec_public @*/ int balance = 1;

   

    /*@ public normal_behavior

      @ requires a > 0;

      @*/

    public void add(int a) {

        this.balance += a;

    }

    /*@ public normal_behavior

    @ requires a < 0;

    @*/

    public void sub(int a){

    this.balance-=a;

    }

   

    public void printBalance() {

        System.out.println("Balance: " + this.balance);

    }

   

    public static void main(String[] args) {

         JMLTest t = new JMLTest();

       

       t.sub(3);

   

        t.printBalance();

       

        System.out.println("Done");

 

    }

   }

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1.     Ихтиёрий бешта Java код яратинг ва уларга JML изоҳларини киритинг.

2.     JML изоҳларни ишлагини билиш учун турли қийматлар киритинг ва олинган натижаларни ҳисоботда акс эттиринг.

Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.

 


7 - Лаборатория иши

Мавзу: Find Bugs ёрдамида Java кодлари таҳлили

Ишдан мақсад: Java дастурлаш тилида ёзилган кодларни FindBugs ёрдамида таҳлил этиш.

Назарий қисм

FindBugs иловаси Java кодларни таҳлил қилиш учун махсус ёзилган тестлаш усули. Ушбу иловадан фойдаланишда турли усуллар мавжуд. Қуйида Eclipse иловасида улаш орқали ёзилган кодларни статик таҳлил қилиш усули келтирилган.

Eclipse учун FindBugs иловасини плагинини ўрнатиш учун қуйидаги манзиллардан биридан фойдаланинг:

·        http://findbugs.cs.umd.edu/eclipse

·        http://findbugs.cs.umd.edu/eclipse-candidate

·        http://findbugs.cs.umd.edu/eclipse-daily

FindBugs иловасида 20 та баг тури мавжуд бўлиб, улар тўртта қуйидаги гуруҳга ажратилади:

·        Scariest (rank 1-4)

·        Scary (rank 5-9)

·        Troubling (rank 10-14)

·        Of concern (rank 15-20)

Мавжуд барча багларни кўриш ва уларни кўринишларини (error, warning, info) созлаш учун Eclipse дастурида WindowsàPreferencesàJavaàEditoràFindBugs бандини танланг. Барча багларни кўриш учун “Minimum rank to report” бандига 20 ни ўрнатинг.

7.1 - расм. FindBugs дастурини созлаш ойнаси

Ишни бажарилиш тартиби ва қўйилган вазифа

Eclipse дастурида қуйидаги содда Java кодларни киритинг ва FindBugs дастуридан фойдаланиб, улардаги багларни аниқланг ва уларни бартараф этинг:

          // misol 1. 

         /*

         String X="A Test";

         String Y=new String("A Test");

         System.out.println(X==Y);

         System.out.println(X.equals(Y));

         */

         //misol 2. Useless

         /*

         int numrows=3;

         int numcols=3;

         int pixels=0;

         for (int i=0; i<numrows; i++)

                for (int j=0; j<numcols; j++);

                  pixels++;

         */

         // misol 3. Using == instead of .equals

         /*

         String n="9";

         String m="8";

         if (n==m)

              System.out.println("equal");

     */

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1.     Баг мавжуд бўлган содда Java кодлар яратинг.

2.       Уларни FindBugs иловаси ёрдамидан текширинг.

Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.

 


8 – Лаборатория иши

Мавзу: OWASP LAPSE+  ёрдамида кодларнинг статик таҳлили

Ишдан мақсад: Java дастурлаш тилида ёзилган кодларни хавфсизликка тестлаш кўникмаларига эга бўлиш.

Назарий қисм

LAPSE+ Java EE иловаларини хавфсизликга текшириш учун фойдаланилади. У Eclipse учун махсус плагин шаклида яратилган ва Java 1.6 ёки ундан юқори муҳитни талаб этади. LAPSE+ статик таҳлиллашга асосланган.

LAPSE+ ни Eclipseда ўрнатиш:

Дастлаб LAPSE+ нинг сўнги версиясини кўчириб олинг ва уни Eclipseнинг плагин каталоги ичида кўчириб ўтказинг.

Шундан сўнг керакли Java EE проектини очинг. WindowsàShow ViewàOther…àLapse+ 2.x танлаб, каталог ичидагиларни барчасини танлаб, ОК тугмасини босинг.

8.1 - расм. LAPSE+ ни Eclipseда бириктириш

LAPSE+ заифликларни таҳлил қилишда учта кўринишни таъминлайди:

Vulnerability Sources View. Зарарли маълумот манбаларини ифодалаган код нуқталарини кўрсатади.

Vulnerability Sinks View. Иловада ишончсиз маълумотларни қўйувчи код нуқталарини кўрсатади.

Provenance Tracker View. Заифлик босқичларини дарахт шаклида ифодалайди ва бу заифлик манбасига етган ёки етмаганини аниқлайди.

LAPSE+ дан фойдаланиш учун керакли проект очилади ва юқоридаги учта ойнадан бири танланади ва унда сичқончанинг ўнг тугмаси босилиб мос ҳолда (Find sinks ёки Find soures) танланади. LAPSE+ автоматик тарзда кодларни таҳлил қилади ва натижаларни кўрсатади.

Ишни бажарилиш тартиби ва қўйилган вазифа

Қуйидаги кодни киритинг ва натижаларни олинг:

public static void ReadDB() throws ClassNotFoundException, SQLException

        {

         resSet = statmt.executeQuery("SELECT * FROM users");

        

         while(resSet.next())

         {

              int id = resSet.getInt("id");

              String  name = resSet.getString("name");

              String  phone = resSet.getString("phone");

              System.out.println( "ID = " + id );

              System.out.println( "name = " + name );

              System.out.println( "phone = " + phone );

              System.out.println();

         }   

        

         System.out.println("Таблица выведена");

         }

Қуйида LAPSE+ орқали олинган таҳлил натижаси келтирилган.

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1.     Хавфсизлик муаммолари мавжуд бўлган содда Java кодлар яратинг.

2.       Уларни LAPSE+ иловаси ёрдамидан текширинг.

Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.

 


9 – Лаборатория иши

Мавзу: Булутли ҳисоблаш тизимида хавфсиз дастурий маҳсулотларни яратиш

Ишдан мақсад: булутли ҳисоблаш технологияларидан фойдаланиб дастурий таъминотларни яратиш.

Назарий қисм

Cloud computing ҳисоблаш модели ҳисобланиб, маълумот, файл сақловчилар, иловалар учун динамик инфратузилмани таъминлаш учун локал ёки глобал тармоқда уланган кўп сондаги тизимлардан ташкил топган. Бу технология ўзи билан бирга, ҳисоблашда харажатларни камайтириш, иловалар ҳости, маълумот сақловчилар ва маълумот узатишда катта имкониятларни олиб келади.

Cloud  тизимини умумий ҳолда тушуниш учун қуйида келтирилган 9.1-расмни олиш мумкин. Ушбу расмда Cloud тизими ташкил этувчилари, унинг хусусиятлари, турлари ва бошқа маълумотлар келтирилган бўлиб, бу маълумотлар бир қарашда Cloud тизими ҳақида дастлабки маълумотларни олишга ёрдам беради.

Cloud Computing технологияси 3 та катта турга ажратилиб, булар қуйидагилар:

-         Инфратузулма хизмати (Infrastructure-as-a-Service, IaaS);

-         Платформа хизмати (Platform-as-a-Service, PaaS);

-         Илова хизмати (Software-as-a-Service, SaaS).

PaaS хизматида истемолчи IaaS хизматидан фойдаланиб қурилган тизим устида, ўзининг истаган дастурий воситани яратиш имконинига эга бўлади. Ушбу имкониятлар дастурларлаш тиллари, махсус дастурлар ёки бошқа қўшимча иловалар кўринишида бўлади. Қисқа қилиб айтганда PaaS хизмати IaaS тизимида ихтиёрий дастурлаш тилларидан фойдаланган ҳолда янги дастурларни яратиш имкониятини беради.

9.1-расм. Cloud тизимларнинг асосий кўринишининг нотўлиқ шакли

Шулардан келиб чиқиб шуни айтиш мумкинки, PaaS хизмати орқали қуйидаги имкониятларга эга бўлинади:

Кам харажат. Ушбу хизматдан фойдаланган ҳолда истемолчи ўз сарф харажатларини камида икки марта камайтириши мумкин.

Қисқа тайёрлов вақти. PaaS хизмати махсус иловалар ёки умумий функцияларни бошқариш тизими асосида дастурий воситани тайёрланиш вақтини камайтиради.

Кам хатарлилик. PaaS хизмати яратилаётган дастурий воситаларда хатарлилик даражасини камайтиради. Сабаби, ушбу тизимда фойдаланилаётган кўплаб функциялар аллақачон тестланган ва синовлардан ўтган.

Юқори хавфсизлик даражаси. Ушбу хизмат асосида яратилаётган дастурий воситалар яратилиш муҳити хавфсиз бўлганлиги сабабли анаънавий усулда яратилган дастурий воситаларга қараганда хавфсиздир.

Фойдаланувчилар талаби ва иловаларнинг бир-бирига боғлиқлиги сабабли PaaS тизимлари ҳам бир нечта операцион тизим ёки илова серверларини ўзида бирлаштирган ҳолда тузилади, масалан LAMP (Linux, Apache, MySql and PHP), J2EE, Ruby ва ҳак. PaaS тизимларига мисол қилиб, Google‟s App Engine, Force.com, Salesforce.com, SaaS Maker, Amazon's Elastic Beanstalk, Heroku, Azure ларни олишимиз мумкин.

9.1-расмда PaaS тизимларидан фойдаланиш усули ва унинг Cloud тизимида жойлашуви келтирилган.

 

 

 

 

 

 

 

 

 

 

 

 


9.1-расм. PaaS хизматидан маълумотлар марказларидан операцион тизим сифатида фойдаланиш

Google App Engine (GAE ёки қисқача App Engine). Ушбу платформа моделига асосланган Cloud Computing хизмати бўлиб, Google бошқарувчи маълумот марказларида Web иловаларни яратишга асосланган.

Ушбу хизматда дастурлаш тиллари сифатида Python, Java (кенгайтирилган JVM тиллари, Groovy, JRuby, Scala, Clojure), Go ва PHP. Ушбу хизмат маълумот сақлаш тизимлари SQL-тилига ўхшаш бўлган, GQL тизимидан фойдаланилади.

AWS Elastic Beanstalk. Ушбу хизмат  Amazon Web Services томонидан таклиф қилинадиган PaaS хизмати бўлиб, Amazon EC2, Amazon S3, Amazon Simple Notification Service (SNS), Amazon CloudWatch хизматлари билан биргаликда ишлаб, фойдаланувчиларга иловалар яратиш учун хизмат кўрсатади.

Ушбу хизмат  томонидан қўллаб қуватланадиган дастурлар қуйидагиларни ўз ичига олади:

-         Apache HTTP Server асосида Ruby, PHP ва Python иловалар;

-         IIS 7.5 асосида .NET Framework иловалари;

-         Apache Tomcat асосида Java иловалар;

-         Node.js иловалари;

-         Docker ташкил этувчилари.

Microsoft Azure. Ушбу PaaS cloud хизмати Microsoft компанияси хизмати бўлиб, у .NET га асосланган инфратузилма асосида ташкил этилган. Microsoft Azure асосан учта ташкил этувчидан иборат бўлиб, улар қуйидагилар:

-         Microsoft Azure хизмати Microsoft маълумот марказларида Windows муҳити учун иловаларни яратиш имкониятини беради.

-         Кейинги хизмати SQL Azure деб номланиб, бунда Microsoft маълумот марказларида маълумот базаси билан боғлиқ амаллар бажарилади.

-         .NET хизмати cloud тизимида иловаларни ишлатиш имкониятини беради.

Бундан ташқари Microsoft Azure Microsoftга хос бўлмаган дастурлаш тиллари, PHP ва Pythonни ҳам қўллаб қуватлайди.

Ишни бажарилиш тартиби ва қўйилган вазифа

Ҳар бир талаба томонидан ўзи билган дастурлаш тили мавжуд бўлган Cloud тизимида дастурлар яратилсин ва улар расм шаклида ҳисоботда акс эттирилсин.

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1.     Cloud тизимларининг имкониятлари ва уларнинг турлари.

2.       PaaS тизими ва у қандай имкониятларни беради.

                                   Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.

                                                           


 

10 – Лабаратория иши

Мавзу: Дастурий маҳсулот хавфсизлигида криптографик ҳимоя усулларидан фойдаланиш

Ишдан мақсад: Содда криптографик шифрлаш алгоритмларининг дастурий таъминотини яратиш бўйича амалий кўникмаларга эга бўлиш.

Назарий қисм

Цезар усули. Цезар шифри оддий силжитиш шифрининг бир қисми ҳисобланади. Бу шифрни римлик император Голе Юлий Цезар ўйлаб топган. Шифрлашда матннинг ҳар бир ҳарфи бошқа ҳарф билан қуйидаги қоида асосида алмаштирилади. Ҳарфларни алмаштиришда келаётган ёзув ҳарфларини k-га силжитиб алмаштирилади. Бу эрда М – бутун сон ҳисобланиб, очиқ матни белгисини бирор алфавитдаги ўрни, С – бутун сон бўлиб, шифр белгини бирор алфавитдаги ўрни. C=(M+k)modm, m - алфавит узунлиги. Дешифрлаш ифодаси эса M=(C-k)modm ифода билан ифодаланади. Юлий Цезар бевосита k = 3 бўлганда ушбу усулдан фойланган.

Цезар усулининг камчилиги бу бир хил ҳарфларнинг ўз навбатида, бир хил ҳарфларга алмашишидир.

Масалан, матн сифатида T0=KOMPUTER сўзини ва К=3 деб оладиган бўлсак  Цезар усули натижасида қуйидаги шифрланган ёзув ҳосил бўлади:

Т1 = NRPSXWHU.

Аффин криптотизимлари. Аффин крипототизимлари кенг тарқалмаган ўрнига қўйиш усуллари саналиб, бир алфавитли шифрлаш усулларига киради. Бу тизимларга аффин тизимидаги Цезар усули, ROT13 ва Атбаш усуллари киради.

Аффин тизимидаги Цезар усулида ҳар бир ҳарфга алмаштирилувчи ҳарфлар махсус формула бўйича аниқланади: E(x)=аx+b (modm), бу ерда а, b - бутун сонлар бўлиб, калитлар ҳисобланади, 0≤а, b<m. m – алфавит узунлиги. 

Дешифрлаш жараёни қуйидаги формула асосида амалга оширилади: . Бу ерда a-1 modm бўйича a га тескари бўлган сон.

         Лотин алфавити фойдаланилганда у қуйидагича рақамланади:

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Шифрлаш. Ушбу усулда маълумотларни шифрлаш учун “ATTACK AT  DAWN” очиқ матни олиниб, калит сифатида a=3 ва b=4 олинди. Алфавит узунлиги m=26 га тенг. Бу ҳолда шифрлаш функцифсининг умумий кўриниши қуйидагича бўлади:. Юқоридаги жадвалга асосланиб қуйидагини олиш мумкин:

Хабар

A

T

T

А

C

K

A

T

D

A

W

N

Описание: x

0

19

19

0

2

10

0

19

3

0

22

13

Шифрлашнинг умумий кўриниши эса қуйидагича бўлади:

Хабар

A

T

T

А

C

K

A

T

D

A

W

N

Описание: xx

0

19

19

0

2

10

0

19

3

0

22

13

Описание: 3x+43x+4

4

61

61

4

10

34

4

61

13

4

70

43

Описание: (3x+4)\pmod{26}(3x+4)mod26

4

9

9

4

10

8

4

9

13

4

18

17

Шифр матн

E

J

J

E

K

I

E

J

N

E

S

R

Дешифрлаш жараёни. Дешифрлаш формуласи  га тенг бўлиб,  , b=4 ва m=26 га тенг бўлади.

Шифр матн

E

J

J

E

K

I

E

J

N

E

S

R

Описание: y

4

9

9

4

10

8

4

9

13

4

18

17

Дешифрлашнинг умумий кўриниши эса :

Шифрматн

E

J

J

E

K

I

E

J

N

E

S

R

Описание: yy

4

9

9

4

10

8

4

9

13

4

18

17

Описание: 9(y-4)9(y-4)

0

45

45

0

54

36

0

45

81

0

126

117

Описание: 9(y-4)\pmod{26}9(y-4)mod26

0

19

19

0

2

10

0

19

3

0

22

13

Хабар

A

T

T

А

C

K

A

T

D

A

W

N

Олинган алфавитдаги барча белгиларни шифрлаш натижаси қуйидагига тенг бўлади.

Хабар

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

x

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

(3x+4)mod26

4

7

10

13

16

19

22

25

2

5

8

11

14

17

20

23

0

3

6

9

12

15

18

21

24

1

Шифр матн

E

H

K

N

Q

T

W

Z

C

F

I

L

O

R

U

X

A

D

G

J

M

P

S

V

Y

B

Вижинер шифри. Биринчи бўлиб Вижинер тизими 1586-йилда чоп этилган ва у кўп алфавитли тизимга нисбатан юқорироқ ўринда туради. Блеза Вижинера ўзини XVI асрнинг француз дипломати деб ҳисоблайди. У криптография тизимига, яъни унинг ривожланишига ўз ҳиссасини қўшган. Вижинер тизими Цезар шифрлаш тизимига қараганда мукаммалроқ ҳисобланиб, унда калит ҳарфидан ҳарфга алмаштирилади. Бундай кўп алфавитли алмаштириш шифрини шифрлаш  жадвали орқали ифодалаш мумкин. Қуйидаги жадвалларда Вижинернинг инглиз алфавити ва кирил алфавитлари учун мос келувчи қийматлар кўрсатилган.

Калит

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

1

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

2

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

3

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

4

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

5

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

6

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

7

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

8

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

9

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

10

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

11

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

12

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

13

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

14

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

15

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

16

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

17

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

18

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

19

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

20

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

21

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

22

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

23

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

24

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

25

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

26

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Кирил алифбосида

 

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

 

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

 

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

 

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

 

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

 

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

 

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

 

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

 

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

 

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

 

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

 

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

 

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

 

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

 

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

 

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

 

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

 

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

 

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

 

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

 

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

 

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

 

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

 

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

 

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

 

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

 

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

 

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

 

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

 

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

 

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

 

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

 

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

 

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

 

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

 

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

 

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

Вижинер усулида шифрлаш. Бу шифрлаш усули кўп алфавитли шифрлаш усулига киради. Қуйида кирил алифбосидан фойдаланилган ҳолда калит “КЎЗА” га тенг бўлган ҳолда, “БАЙРАМ_КУНИ” очиқ матнини шифрлаш келтирилган. Бунинг учун дастлаб сатр бўйлаб кирил алифбоси ёзилади. Алифбони биринчи ҳарфи тагидан калит сўз вертикал шаклда ёзилади. Шундан сўнг ҳар бир калит сўзнинг ҳарфи орқасидан горизонтал шаклда алфавит тўлдириб ёзилади.

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

А

Б

В

Г

Д

Е

Ё

Ж

А

Б

В

Г

Д

Е

Ё

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Ь

Ъ

Э

Ю

Я

Ў

Қ

Ғ

Ҳ

_

 Ушбу жадвалдан шифрлаш натижаси сифатида қуйидагини олиш мумкин: Т1=ЛЎСРКЗЖКЎИР.

Очиқ матн

Б

А

Й

Р

А

М

_

К

У

Н

И

Калит

К

Ў

З

А

К

Ў

З

А

К

Ў

З

Шифрланган матн

Л

Ў

С

Р

К

З

Ж

К

Ў

И

Р

Вернам шифри. Вернамнинг шифрлаш тизими модул қиймати m=2 бўлган Вижинэр шифрлаш тизимининг бир қисми ҳисобланиб, 1926-йилда бу усулнинг аниқ кўриниши ишлаб чиқилади. Гилбэртом Вернам АТ&США фирмаси хомийлиги остида кирувчи матн сифатида иккилик саноқ системасидан фойдаланди. Шифрлашда биринчи Инглиз алфавитидаги (A, B...Z). Матннинг хар бир харфи 5-бит бўлакли (b0,b1…b4) Бадо рақами билан кодланади. Ихтиёрий кетма-кетликдаги иккилик калитлар k0,k1,k2, аввал китобсимон лентага ёзилади. Қуйидаги расмда узатилаётган ахборотни Вернам усули орқали шифрлаш кўрсатилган (10.1-расм).

xx= y XOR ky= x XOR k

10.1-расм. Вернам усули орқали шифрлаш

Кирувчи матнни шифрлашда x-кирувчи матн иккилик кўринишига ўтказилади ва иккилик модул остида иккилик кетма-кетликдаги k-калит билан шифрлаш амалга оширилади.

Бу шифрланган ёзув қуйидаги тенглик орқали амалга оширилади.

Дешифрлаш учун шифрматн ва калит хор амалида қўшилади.

Ишни бажарилиш тартиби ва қўйилган вазифа

Асосий матн шифрлаш усулларидан бирида шифрлансин ва қадамма – қадам изоҳлансин. Шунингдек Delpi, Java, С++ ва C# дастурлаш тизимларидан бирида дастурий таъминот яратилсин.

Ҳисобот таркиби

Ҳисобот қуйидаги маълумотлардан таркиб топган бўлиши лозим:

1.     Яратилган дастурий таъминотнинг дастурий коди ва олинган скриншотлар.

Назорат саволлари

1.     Бир алфавитли шифрлашнинг умумий моҳияти нимада.

2.     Кўп алфавитли шифрлашнинг умумий моҳияти нимада.

3.     Вернам шифрини тавфсифланг.

4.     Вижинер шифрида маълумотларни шифрлаш ва дешифрлаш қандай амалга оширилади.

 

Фойдаланилган адабиётлар

1.     Software Security. Erik Poll. Online course.

2.     Secure Programming Cookbook for C and C++. John Viega and Matt Messier.

3.     Software Security. Gary McGraw's.

4.     Secure Programming in Java. Whitepaper. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit.

5.     Secure Coding in C and C++. Second Edition. Robert C. Seacord.

 

 


МУНДАРИЖА

 

1.      

Кириш қийматини назоратлаш .................................................

3

2.      

Хотиранинг тўлиб тошиш таҳдиди ..........................................

7

3.      

SQL инекция...............................................................................

13

4.      

Тезкор мурожаат шарти таҳдиди (Race condition) ...................

20

5.      

Дастурлаш тилига асосланган хавфсизлик ..............................

25

6.      

VCGen билан дастурий маҳсулотларни текшириш ................

34

7.      

Find Bugs ёрдамида Java кодлари таҳлили ...............................

40

8.      

OWASP LAPSE+  ёрдамида кодларнинг статик таҳлили .......

43

9.      

Булутли ҳисоблаш тизимида хавфсиз дастурий маҳсулотларни яратиш ..............................................................

 

46

10.            

Дастурий маҳсулот хавфсизлигида криптографик ҳимоя усулларидан фойдаланиш .........................................................

 

51

   
ҚАЙДЛАР УЧУН САҲИФА

 

____________________________________________________________________________________________________________________

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Дастурий маҳсулот хавфсизлиги инжиниринги фанидан лаборатория ишларини бажариш учун услубий кўрсатма

 

 

 

 

 

 

 

 

 

 

Муаллифлар

 

Ташев К.А.

Худойқулов З.Т.

Тақризчилар

 

Аҳмедова О.П. Минглиқулов З.Б.

Масъул муҳаррир

 

Рахимова Н.Х.

Муҳаррир

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

Бичими 60х84 1/16

Босма табоғи _____ Адади____

Буюртма №____

 

Тошкент ахборот технологиялари университети «ALOQACHI» нашриёт – матбаа марказида Чоп этилди.

Тошкент ш., Амир Темур кўчаси, 108 – уй.