Кіріспе

Бағдарламалық қамтамасыз етуді қамтамасыз ету (SwA) – бағдарламалық қамтамасыз ету өнімдерінің сенімділігін, қауіпсіздігін және қорғалуын қамтамасыз ететін бағдарламалық қамтамасыз етуді әзірлеудегі маңызды процесс. Ол талаптарды талдау, жобаны қарау, кодты тексеру, сынақтан өткізу және ресми растау сияқты әртүрлі іс-шараларды қамтиды. Бағдарламалық қамтамасыз етуді қамтамасыз етудің маңызды құралы – қауіпсіз кодтау практикасы, ол индустрияда қабылданған стандарттар мен ең жақсы тәжірибелерді, мысалы, Бағдарламалық инженерия институтының (SEI) CERT Secure Coding Standards (SCS) сипаттағандарын ұстанады. Бағдарламалық қамтамасыз етуді қамтамасыз етудің тағы бір маңызды аспектісі – сынақ, ол бағдарламалық қамтамасыз етуді әзірлеу процесінің әртүрлі кезеңдерінде жүргізілуі керек және функционалдық сынақ, өнімділік сынағы және қауіпсіздік сынағын қамтуы мүмкін. Сынақ бағдарламалық өнімдердегі кез келген кемшіліктерді немесе осал жерлерді оларды шығару алдында анықтауға көмектеседі. Бұдан өзге, бағдарламалық қамтамасыз етуді қамтамасыз ету тәуекелді басқару және сапаны басқару сияқты ұйымдық және басқарушылық іс-шараларды қамтиды, бұл бағдарламалық қамтамасыз ету өнімдерінің мүдделі тараптардың қажеттіліктері мен күтулеріне сай келуін қамтамасыз етеді. Бағдарламалық қамтамасыз етудің мақсаты – бағдарламалық қамтамасыз етудің осал тұстардан бос екенін және бағдарламалық қамтамасыз етуді әзірлеу процесін реттейтін барлық талаптар мен стандарттарға сәйкес келетінін қамтамасыз ету болып табылады. [3] Сонымен қатар, бағдарламалық қамтамасыз етудің мақсаты – бағдарламалық жүйелерді қорғау. Бұл мақсатқа жету үшін ықтимал осал тұстарды алдын ала динамикалық және статикалық талдау қажет, сондай-ақ жүйелік деңгейдегі толық түсінік ұсынылады. Архитектуралық тәуекелді талдау кез келген бағдарламалық қамтамасыз ету бағдарламасында маңызды рөл атқарады, өйткені дизайн кемшіліктері қауіпсіздік проблемаларының 50% құрайды және оларды тек кодты қарап табу мүмкін емес. Индустрияда қабылданған стандарттар мен ең жақсы тәжірибелерді сақтау, сынақтан өткізу және басқару тәжірибесін енгізу, сондай-ақ архитектуралық тәуекелді талдау жүргізу арқылы бағдарламалық қамтамасыз етуді қамтамасыз ету жүйелік ақаулар мен қауіпсіздік бұзушылықтарының тәуекелін азайтады, бұл бағдарламалық қамтамасыз етуді дамытудың маңызды аспектісі болып табылады.

Неліктен бағдарламалық қамтамасыз ету маңызды?

Қазіргі цифрлық әлемде автомобильдер, медициналық құрылғылар, қаржы жүйелері және әскери техниканы қоса алғанда, көптеген құрылғылар мен жүйелерді басқару үшін бағдарламалық жасақтама қолданылады. Сондықтан бағдарламалық өнімдердің сенімділігін, қауіпсіздігін және қорғалуын қамтамасыз ету өте маңызды. Тиісті сынақтан өткізілмеген және тексерілмеген бағдарламалық жасақтамада жүйелік ақаулар, қауіпсіздік бұзулары және жеке тұлғаларға, кәсіпорындарға және жалпы қоғамға кері әсер ететін басқа да күрделі проблемаларға әкелетін кемшіліктер мен осалдықтар болуы мүмкін. Ұлттық Стандарттар және Технологиялар Институты (NIST) бағдарламалық жасақтаманы қамтамасыз етуді «бағдарламалық жасақтамада қасақана жоспарланған немесе оның өмірлік циклының кез келген кезеңінде кездейсоқ енгізілген осалдықтардың болмауына, сондай-ақ бағдарламалық жасақтаманың мақсаттасқандай жұмыс істеуіне деген сенім деңгейі» деп анықтайды [22]. Ұйымдар бағдарламалық жасақтаманы қамтамасыз ету арқылы қымбат жүйелік ақаулардың, деректерді бұзудың және басқа да жағымсыз салдарлардың тәуекелін азайта алады. Бағдарламалық жасақтаманың кемшіліктерімен және осалдықтарымен байланысты ықтимал тәуекелдерден өзге, бағдарламалық жасақтаманы қамтамасыз етуге қатысты заңдық және нормативтік талаптар да бар. Осы ережелерді сақтамау заңдық және қаржылық жазаларға әкелуі мүмкін. Мысалы, белгілі бір салалар үшін бағдарламалық жасақтаманы әзірлейтін ұйымдар өз өнімдерінің қауіпсіздігі мен қорғалуын қамтамасыз етуді талап ететін ережелерге бағынуы керек. Ұлттық қорғаныс, банк ісі, денсаулық сақтау, телекоммуникация, авиация және қауіпті материалдарды бақылау сияқты көптеген маңызды функциялар бағдарламалық жасақтаманың дұрыс және болжамды жұмыс істеуіне байланысты. Егер осы қызметтерді қолдайтын бағдарламалық жасақтама жүйелері істен шықса, олар күрт бұзылуы мүмкін. Сондықтан ұйымдар жүйелік ақаулар мен қауіпсіздік бұзуларының тәуекелін азайту үшін бағдарламалық жасақтаманы сынау және тексеру әдістері мен құралдарын енгізуі өте маңызды.

Атқару

Бағдарламалық қамтамасыз етуді қамтамасыз ету – бағдарламалық өнімдердің сенімділігін, қауіпсіздігін және қорғалуын қамтамасыз етуге бағытталған бірқатар іс-шаралар арқылы жүзеге асырылады. Бұл іс-шаралар талаптарды талдау, жобаны саралау, кодты тексеру, сынақтан өткізу және ресми растауды қамтиды. [1]

Талаптарды талдау бағдарламалық өнімнің функционалдық және функционалдық емес талаптарын анықтау және қалыптастыруды қамтиды. Бұл бағдарламалық жасақтаманың мақсатын, оның арналған пайдаланушыларын, сондай-ақ орындалуға тиіс қатысты стандарттар мен ережелерді түсінуді қамтиды. Жобаны саралау бағдарламалық жасақтама жобасының талаптарға сай келіп, іске асырылатынына көз жеткізу үшін бағалауды қамтиды. Бұл бағдарламалық қамтамасыз етудің сенімділігіне, қауіпсіздігіне немесе қорғалуына әсер ете алатын жобалық кемшіліктерді, қателерді немесе толық еместікті тексеруді қамтиды. [24]

Кодты тексеру – өнеркәсіптік стандарттар мен ең жақсы тәжірибелерге сәйкес келетіндігін қамтамасыз ету үшін кодты қарауды қамтиды. Бұл кодтың сапасын, оқылуын және қолдауға қабілеттілігін тексеруді, сондай-ақ әлеуетті осалдықтарды немесе қауіпсіздік мәселелерін анықтауды қамтиды. [2]

Сынақтан өткізу бағдарламалық жасақтаманы орындауды қамтиды, оның сенімділігіне, қауіпсіздігіне немесе қорғалуына әсер ете алатын ақауларды немесе осалдықтарды анықтау үшін. Бұл функционалдық сынақтар, өнімділік сынақтары және қауіпсіздік сынақтары, сондай-ақ басқа да сынақ түрлерін қамтиды. [3]

Формалды растау бағдарламалық қамтамасыз етудің күтілгендей жұмыс істейтінін және ешқандай ақаулар мен осалдықтар жоқ екенін дәлелдеу үшін математикалық немесе логикалық әдістерді қолдануды қамтиды. Бұған модельді тексеру, теореманы дәлелдеу және статикалық талдау сияқты техникалар кіреді. [1]

Техникалар

Бағдарламалық жасақтаманы сынау және тексеру – бағдарламалық жасақтама кодтағы ақаулар мен осалдықтарды анықтау және жою үшін қолданылатын техникалар. Сынау және тексеру техникаларының бірнеше түрі бар, оның ішінде функционалдық сынау, өнімділік сынау және қауіпсіздік сынау. [3]
Машиналық оқыту бағдарламалық қамтамасыз етуде бағдарламалық мәселелерді анықтау үшін көбірек қолданылуда. Көп көлемдегі деректерді талдау мүмкіндігі арқасында машиналық оқыту адамдар байқамайтын үлгілер мен аномалияларды анықтай алады. Машиналық оқытуды қолдану бағдарламалық жасақтаманың сапасын және қауіпсіздігін арттыруға мүмкіндік береді. Функционалдық сынау бағдарламалық жасақтаманың күтілген функцияларын орындауын қамтамасыз ету үшін қолданылады. Бұл сынау түрі бағдарламалық жасақтаманы іске қосуды және оның мүмкіндіктері мен функционалдығын күтілгендей жұмыс істейтінін тексеруді қамтиды. [4]
Өнімділік сынау бағдарламалық жасақтаманың жылдамдығын, жауап беру қабілетін және тұрақтылығын өлшеу үшін қолданылады. Бұл сынау түрі бағдарламалық жасақтаманың жүктемені қабылдай алатынын және әртүрлі жағдайларда жақсы жұмыс істейтінін қамтамасыз ету үшін нақты жағдайларды модельдеуді қамтиды. [4]
Қауіпсіздік сынау бағдарламалық жасақтамадағы шабуылшылар пайдалана алатын осалдықтар мен әлсіз жақтарын анықтау үшін қолданылады. Бұл сынау түрі бағдарламалық жасақтаманың қауіпсіздігін бұзуға тырысу үшін түрлі техникаларды қолдануды қамтиды, мысалы, ену сынағы және осалдықтарды сканерлеу. [3]
Сынаудан өзге, бағдарламалық кодтың дұрыс және ақаусыз екенін қамтамасыз ету үшін тексеру техникалары қолданылады. Бұл кодты қарау, формалды тексеру және статикалық талдау сияқты техникаларды қамтиды. [1]
Кодты қарау – кодтың салалық қабылданған стандарттар мен ең жақсы тәжірибелерге сәйкес келетінін тексеруді қамтиды. Бұл кодтың сапасын, оқылуын және қолдауға қабілеттілігін тексеруді, сондай-ақ потенциалды осалдықтарды немесе қауіпсіздік мәселелерін анықтауды қамтиды. [2]
Формалды тексеру математикалық немесе логикалық әдістерді қолдану арқылы бағдарламалық жасақтаманың күтілгендей әрекет ететінін және ешқандай ақаулар мен осалдықтар жоқ екенін дәлелдеуді қамтиды. Бұған модельді тексеру, теореманы дәлелдеу және статикалық талдау сияқты техникалар кіреді. [1]
Статикалық талдау бағдарламалық кодты орындамай-ақ, потенциалды ақаулар мен осалдықтарды анықтау үшін талдауды қамтиды. Бұған кодты талдау құралдарын және кодты тексеру сияқты техникалар кіреді. [2]

Құралдар

Бағдарламалық қамтамасыз етуді сынау және тексеру құралдары бағдарламалық қамтамасыз ету кодындағы ақаулар мен осалдықтарды анықтау және жою үшін қолданылады. Сынау және тексеру құралдарының бірнеше түрі бар, соның ішінде: Жасанды интеллект (AI) бағдарламалық қамтамасыз етуде бағдарламалық қамтамасыз ету кодтарының ақаулары мен осал жерлерін анықтау және жою үшін көбірек қолданылуда. Машиналық оқыту және табиғи тілді өңдеу сияқты AI әдістері тестілеу және тексеру процестерін автоматтандыру үшін, оларды жылдам және тиімдірек ету үшін пайдаланылуы мүмкін. Статикалық талдау құралдары: Бұл құралдар бағдарламалық жасақтаманың бастапқы кодын оны орындамай-ақ, ықтимал ақаулар мен осалдықтарды анықтау үшін талдайды. Статикалық талдау құралдарын кодтың сапасына, қауіпсіздігіне және кодтау стандарттарына сәйкестігіне байланысты мәселелерді анықтау үшін пайдалануға болады. Динамикалық талдау құралдары: Бұл құралдар бағдарламалық жасақтаманың орындалып жатқан кезіндегі мінез-құлқын талдап, бастапқы кодта көрінбейтін ақаулар мен осалдықтарды анықтайды. Динамикалық талдау құралдарын өнімділікке, жад пайдалануына және қауіпсіздікке байланысты мәселелерді анықтау үшін пайдалануға болады. [25] Fuzz тестілеу құралдары: Бұл құралдар күтпеген немесе бұрмаланған деректерге төзімділігін тексеру үшін бағдарламалық қосымшаға кездейсоқ деректерді жібереді. Fuzz тестілеу құралдарын деректерді растау, жад басқару және қауіпсіздікке байланысты мәселелерді анықтау үшін пайдалануға болады. [25] Енгізуді тексеру құралдары: Бұл құралдар шабуылдаушылар пайдалана алатын осалдықтарды анықтау үшін бағдарламалық қосымшаға шабуыл жасауды симуляциялайды. Енгізуді тексеру құралдары SQL инъекциясы, сайттар аралық скрипттер және буфер асығу сияқты қауіпсіздікке байланысты мәселелерді анықтау үшін пайдаланылуы мүмкін. Сынақтарды басқару құралдары: Бұл құралдар бағдарламалық қамтамасыз етуді сынау процесін басқару үшін қолданылады, соның ішінде сынақ жағдайларын жасау, орындау және есеп беру. Сынақтарды басқару құралдары барлық қажетті сынақтардың жүргізілуін, ақаулардың анықталып, жойылуын қамтамасыз етуге көмектеседі. [24]

АҚШ Қорғаныс министрлігі (DoD)

Қорғаныс министрлігі үшін SwA – «бағдарламалық құралдың тек қана көздеген мақсаты бойынша ғана жұмыс істейтініне және өмірлік циклы бойында бағдарламалық құралдың бір бөлігі ретінде қасақана немесе қасақана емес түрде жасалған немесе енгізілген осалдықтардан бос екендігіне деген сенім деңгейі» деп анықталады. Қорғаныс министрлігі JFAC қаржылаған екі жақында жарияланған материалда көрсетілгендей, Бағдарламалық инженерия институты (SEI) және Әскери қызметтер мен NSA-дағы тәжірибелі мамандар басшылығымен SwA-ны бағдарламалық құралды дамыту саласындағы тиімді инженерлік тәжірибе ретінде жетілдіріп келеді. Бағдарлама жетекшісінің SwA нұсқаулығы SwA-ны қалай жоспарлауға, ресурстармен қамтамасыз етуге және басқаруға болатынын көрсетеді, ал Дамытушының SwA нұсқаулығы өмірлік цикл бойында бейімделетін техникалық тәжірибелерді ұсынады. Бұл екі құжат та өз саладағы алғашқы болып табылады және марапатталған. Қорғаныс министрлігінде SwA қабілетін құруға бағытталған екі ірі ұйым – Бірлескен федералды кепілдік беру орталығы (JFAC) және DoD SwA тәжірибе қауымдастығы. Қауымдастық 32 рет қатарынан өткен, тоқсан сайынғы әріптестік форумы ретінде жұмыс істейді. Екеуі де АҚШ үкіметінің басқа бөлімдеріне ашық. JFAC жарғысы оның веб-сайтында қолжетімді. Саудада қолжетімді SwA құралдарының түрлері туралы кеңірек білу үшін JFAC Қорғаныс талдау институтын (IDA) Қазіргі жағдайды бағалау ресурсын (SOAR) жасауға қаржылады. Өмірлік цикл бойында SwA-ны «инженерлік» енгізудегі жаңашылдық – таңдалған NIST 800 53 бақылауларын инженерлік тапсырмалармен байланыстыру, нәтижесінде инженерлік нәтижелер Тәуекелді басқару аясын (RMF) анықтайды және Жұмыс істеуге рұқсат беруді (ATO) қамтамасыз етеді. Дерек элементтерінің сипаттамалары (DID), машинамен оқылaтын осалдық туралы есептердің форматтары және техникаларды қолдануға қатысты қысқаша шолу JFAC веб-сайтында қолжетімді. Басқа да жаңарулар жобаланып жатыр.

Ұлттық аэронавтика және ғарыш басқармасы (NASA)

NASA-ның мәліметінше, бағдарламалық қамтамасыз ету – "бағдарламалық процестер мен өнімдердің талаптарға, стандарттарға және процедураларға сәйкес келуін қамтамасыз ететін жоспарланған және жүйелі шаралар жиынтығы. Оған сапаны қамтамасыз ету, сапа инженериясы, тексеру және растау, кемшіліктерді тіркеу және түзету шаралары, қауіпсіздікті және қорғауды қамтамасыз ету, сондай-ақ бағдарламалық өмірлік цикл ішінде оларды қолдану кіреді". NASA бағдарламалық қамтамасыз ету стандартында былай делінген: "Бағдарламалық жасақтаманы әзірлеу өмірлік циклінде осы пәндерді қолдану бағдарламалық қамтамасыз ету деп аталады".

Кодтағы үздіктікті қамтамасыз ету бағдарламалық қамтамасыз ету форумы (SAFECode)

SAFECode-қа сәйкес, бағдарламалық қамтамасыз етуді қамтамасыз ету – бұл бағдарламалық қамтамасыз ету, аппараттық құралдар мен қызметтердің қасақана және қасақана емес осалдықтардан бос екендігіне және бағдарламалық қамтамасыз етудің күтілгендей жұмыс істейтіндігіне сенімділік.