Кіріспе
Бағдарламалық қамтамасыз етуді қамтамасыз ету (SwA) – бағдарламалық қамтамасыз ету өнімдерінің сенімділігін, қауіпсіздігін және қорғалуын қамтамасыз ететін бағдарламалық қамтамасыз етуді әзірлеудегі маңызды процесс. Ол талаптарды талдау, жобаны қарау, кодты тексеру, сынақтан өткізу және ресми растау сияқты әртүрлі іс-шараларды қамтиды. Бағдарламалық қамтамасыз етуді қамтамасыз етудің маңызды құралы – қауіпсіз кодтау практикасы, ол индустрияда қабылданған стандарттар мен ең жақсы тәжірибелерді, мысалы, Бағдарламалық инженерия институтының (SEI) CERT Secure Coding Standards (SCS) сипаттағандарын ұстанады. Бағдарламалық қамтамасыз етуді қамтамасыз етудің тағы бір маңызды аспектісі – сынақ, ол бағдарламалық қамтамасыз етуді әзірлеу процесінің әртүрлі кезеңдерінде жүргізілуі керек және функционалдық сынақ, өнімділік сынағы және қауіпсіздік сынағын қамтуы мүмкін. Сынақ бағдарламалық өнімдердегі кез келген кемшіліктерді немесе осал жерлерді оларды шығару алдында анықтауға көмектеседі. Бұдан өзге, бағдарламалық қамтамасыз етуді қамтамасыз ету тәуекелді басқару және сапаны басқару сияқты ұйымдық және басқарушылық іс-шараларды қамтиды, бұл бағдарламалық қамтамасыз ету өнімдерінің мүдделі тараптардың қажеттіліктері мен күтулеріне сай келуін қамтамасыз етеді. Бағдарламалық қамтамасыз етудің мақсаты – бағдарламалық қамтамасыз етудің осал тұстардан бос екенін және бағдарламалық қамтамасыз етуді әзірлеу процесін реттейтін барлық талаптар мен стандарттарға сәйкес келетінін қамтамасыз ету болып табылады. [3] Сонымен қатар, бағдарламалық қамтамасыз етудің мақсаты – бағдарламалық жүйелерді қорғау. Бұл мақсатқа жету үшін ықтимал осал тұстарды алдын ала динамикалық және статикалық талдау қажет, сондай-ақ жүйелік деңгейдегі толық түсінік ұсынылады. Архитектуралық тәуекелді талдау кез келген бағдарламалық қамтамасыз ету бағдарламасында маңызды рөл атқарады, өйткені дизайн кемшіліктері қауіпсіздік проблемаларының 50% құрайды және оларды тек кодты қарап табу мүмкін емес. Индустрияда қабылданған стандарттар мен ең жақсы тәжірибелерді сақтау, сынақтан өткізу және басқару тәжірибесін енгізу, сондай-ақ архитектуралық тәуекелді талдау жүргізу арқылы бағдарламалық қамтамасыз етуді қамтамасыз ету жүйелік ақаулар мен қауіпсіздік бұзушылықтарының тәуекелін азайтады, бұл бағдарламалық қамтамасыз етуді дамытудың маңызды аспектісі болып табылады.
Неліктен бағдарламалық қамтамасыз ету маңызды?
Қазіргі цифрлық әлемде автомобильдер, медициналық құрылғылар, қаржы жүйелері және әскери техниканы қоса алғанда, көптеген құрылғылар мен жүйелерді басқару үшін бағдарламалық жасақтама қолданылады. Сондықтан бағдарламалық өнімдердің сенімділігін, қауіпсіздігін және қорғалуын қамтамасыз ету өте маңызды. Тиісті сынақтан өткізілмеген және тексерілмеген бағдарламалық жасақтамада жүйелік ақаулар, қауіпсіздік бұзулары және жеке тұлғаларға, кәсіпорындарға және жалпы қоғамға кері әсер ететін басқа да күрделі проблемаларға әкелетін кемшіліктер мен осалдықтар болуы мүмкін. Ұлттық Стандарттар және Технологиялар Институты (NIST) бағдарламалық жасақтаманы қамтамасыз етуді «бағдарламалық жасақтамада қасақана жоспарланған немесе оның өмірлік циклының кез келген кезеңінде кездейсоқ енгізілген осалдықтардың болмауына, сондай-ақ бағдарламалық жасақтаманың мақсаттасқандай жұмыс істеуіне деген сенім деңгейі» деп анықтайды [22]. Ұйымдар бағдарламалық жасақтаманы қамтамасыз ету арқылы қымбат жүйелік ақаулардың, деректерді бұзудың және басқа да жағымсыз салдарлардың тәуекелін азайта алады. Бағдарламалық жасақтаманың кемшіліктерімен және осалдықтарымен байланысты ықтимал тәуекелдерден өзге, бағдарламалық жасақтаманы қамтамасыз етуге қатысты заңдық және нормативтік талаптар да бар. Осы ережелерді сақтамау заңдық және қаржылық жазаларға әкелуі мүмкін. Мысалы, белгілі бір салалар үшін бағдарламалық жасақтаманы әзірлейтін ұйымдар өз өнімдерінің қауіпсіздігі мен қорғалуын қамтамасыз етуді талап ететін ережелерге бағынуы керек. Ұлттық қорғаныс, банк ісі, денсаулық сақтау, телекоммуникация, авиация және қауіпті материалдарды бақылау сияқты көптеген маңызды функциялар бағдарламалық жасақтаманың дұрыс және болжамды жұмыс істеуіне байланысты. Егер осы қызметтерді қолдайтын бағдарламалық жасақтама жүйелері істен шықса, олар күрт бұзылуы мүмкін. Сондықтан ұйымдар жүйелік ақаулар мен қауіпсіздік бұзуларының тәуекелін азайту үшін бағдарламалық жасақтаманы сынау және тексеру әдістері мен құралдарын енгізуі өте маңызды.
Атқару
Бағдарламалық қамтамасыз етуді қамтамасыз ету – бағдарламалық өнімдердің сенімділігін, қауіпсіздігін және қорғалуын қамтамасыз етуге бағытталған бірқатар іс-шаралар арқылы жүзеге асырылады. Бұл іс-шаралар талаптарды талдау, жобаны саралау, кодты тексеру, сынақтан өткізу және ресми растауды қамтиды. [1]
Талаптарды талдау бағдарламалық өнімнің функционалдық және функционалдық емес талаптарын анықтау және қалыптастыруды қамтиды. Бұл бағдарламалық жасақтаманың мақсатын, оның арналған пайдаланушыларын, сондай-ақ орындалуға тиіс қатысты стандарттар мен ережелерді түсінуді қамтиды. Жобаны саралау бағдарламалық жасақтама жобасының талаптарға сай келіп, іске асырылатынына көз жеткізу үшін бағалауды қамтиды. Бұл бағдарламалық қамтамасыз етудің сенімділігіне, қауіпсіздігіне немесе қорғалуына әсер ете алатын жобалық кемшіліктерді, қателерді немесе толық еместікті тексеруді қамтиды. [24]
Кодты тексеру – өнеркәсіптік стандарттар мен ең жақсы тәжірибелерге сәйкес келетіндігін қамтамасыз ету үшін кодты қарауды қамтиды. Бұл кодтың сапасын, оқылуын және қолдауға қабілеттілігін тексеруді, сондай-ақ әлеуетті осалдықтарды немесе қауіпсіздік мәселелерін анықтауды қамтиды. [2]
Сынақтан өткізу бағдарламалық жасақтаманы орындауды қамтиды, оның сенімділігіне, қауіпсіздігіне немесе қорғалуына әсер ете алатын ақауларды немесе осалдықтарды анықтау үшін. Бұл функционалдық сынақтар, өнімділік сынақтары және қауіпсіздік сынақтары, сондай-ақ басқа да сынақ түрлерін қамтиды. [3]
Формалды растау бағдарламалық қамтамасыз етудің күтілгендей жұмыс істейтінін және ешқандай ақаулар мен осалдықтар жоқ екенін дәлелдеу үшін математикалық немесе логикалық әдістерді қолдануды қамтиды. Бұған модельді тексеру, теореманы дәлелдеу және статикалық талдау сияқты техникалар кіреді. [1]
Техникалар
Бағдарламалық жасақтаманы сынау және тексеру – бағдарламалық жасақтама кодтағы ақаулар мен осалдықтарды анықтау және жою үшін қолданылатын техникалар. Сынау және тексеру техникаларының бірнеше түрі бар, оның ішінде функционалдық сынау, өнімділік сынау және қауіпсіздік сынау. [3]
Машиналық оқыту бағдарламалық қамтамасыз етуде бағдарламалық мәселелерді анықтау үшін көбірек қолданылуда. Көп көлемдегі деректерді талдау мүмкіндігі арқасында машиналық оқыту адамдар байқамайтын үлгілер мен аномалияларды анықтай алады. Машиналық оқытуды қолдану бағдарламалық жасақтаманың сапасын және қауіпсіздігін арттыруға мүмкіндік береді. Функционалдық сынау бағдарламалық жасақтаманың күтілген функцияларын орындауын қамтамасыз ету үшін қолданылады. Бұл сынау түрі бағдарламалық жасақтаманы іске қосуды және оның мүмкіндіктері мен функционалдығын күтілгендей жұмыс істейтінін тексеруді қамтиды. [4]
Өнімділік сынау бағдарламалық жасақтаманың жылдамдығын, жауап беру қабілетін және тұрақтылығын өлшеу үшін қолданылады. Бұл сынау түрі бағдарламалық жасақтаманың жүктемені қабылдай алатынын және әртүрлі жағдайларда жақсы жұмыс істейтінін қамтамасыз ету үшін нақты жағдайларды модельдеуді қамтиды. [4]
Қауіпсіздік сынау бағдарламалық жасақтамадағы шабуылшылар пайдалана алатын осалдықтар мен әлсіз жақтарын анықтау үшін қолданылады. Бұл сынау түрі бағдарламалық жасақтаманың қауіпсіздігін бұзуға тырысу үшін түрлі техникаларды қолдануды қамтиды, мысалы, ену сынағы және осалдықтарды сканерлеу. [3]
Сынаудан өзге, бағдарламалық кодтың дұрыс және ақаусыз екенін қамтамасыз ету үшін тексеру техникалары қолданылады. Бұл кодты қарау, формалды тексеру және статикалық талдау сияқты техникаларды қамтиды. [1]
Кодты қарау – кодтың салалық қабылданған стандарттар мен ең жақсы тәжірибелерге сәйкес келетінін тексеруді қамтиды. Бұл кодтың сапасын, оқылуын және қолдауға қабілеттілігін тексеруді, сондай-ақ потенциалды осалдықтарды немесе қауіпсіздік мәселелерін анықтауды қамтиды. [2]
Формалды тексеру математикалық немесе логикалық әдістерді қолдану арқылы бағдарламалық жасақтаманың күтілгендей әрекет ететінін және ешқандай ақаулар мен осалдықтар жоқ екенін дәлелдеуді қамтиды. Бұған модельді тексеру, теореманы дәлелдеу және статикалық талдау сияқты техникалар кіреді. [1]
Статикалық талдау бағдарламалық кодты орындамай-ақ, потенциалды ақаулар мен осалдықтарды анықтау үшін талдауды қамтиды. Бұған кодты талдау құралдарын және кодты тексеру сияқты техникалар кіреді. [2]
Machine learning is increasingly used in software assurance to detect software problems. With the ability to analyze large volumes of data, machine learning can identify patterns and anomalies that may go unnoticed by humans. The use of machine learning can ultimately improve the quality and security of software. Functional testing is used to ensure that the software performs the functions it is intended to perform. This type of testing involves running the software and testing its features and functionality to ensure that it works as expected. [4]
Performance testing is used to measure the speed, responsiveness, and stability of the software. This type of testing involves simulating real world scenarios to ensure that the software can handle the load and perform well under various conditions. [4]
Security testing is used to identify vulnerabilities and weaknesses in the software that could be exploited by attackers. This type of testing involves using various techniques to attempt to breach the security of the software, such as penetration testing and vulnerability scanning. [3]
In addition to testing, verification techniques are used to ensure that the software code is correct and free of defects. This includes techniques such as code reviews, formal verification, and static analysis. [1]
Code reviews involve checking the code to ensure that it conforms to industry accepted standards and best practices. This includes checking for code quality, readability, and maintainability, as well as identifying potential vulnerabilities or security issues. [2]
Formal verification involves using mathematical or logical methods to prove that the software behaves as intended and does not contain any defects or vulnerabilities. This includes techniques such as model checking, theorem proving, and static analysis. [1]
Static analysis involves analyzing the software code without executing it, to identify potential defects or vulnerabilities. This includes techniques such as code analysis tools and code inspections. [2]
Құралдар
Бағдарламалық қамтамасыз етуді сынау және тексеру құралдары бағдарламалық қамтамасыз ету кодындағы ақаулар мен осалдықтарды анықтау және жою үшін қолданылады. Сынау және тексеру құралдарының бірнеше түрі бар, соның ішінде: Жасанды интеллект (AI) бағдарламалық қамтамасыз етуде бағдарламалық қамтамасыз ету кодтарының ақаулары мен осал жерлерін анықтау және жою үшін көбірек қолданылуда. Машиналық оқыту және табиғи тілді өңдеу сияқты AI әдістері тестілеу және тексеру процестерін автоматтандыру үшін, оларды жылдам және тиімдірек ету үшін пайдаланылуы мүмкін. Статикалық талдау құралдары: Бұл құралдар бағдарламалық жасақтаманың бастапқы кодын оны орындамай-ақ, ықтимал ақаулар мен осалдықтарды анықтау үшін талдайды. Статикалық талдау құралдарын кодтың сапасына, қауіпсіздігіне және кодтау стандарттарына сәйкестігіне байланысты мәселелерді анықтау үшін пайдалануға болады. Динамикалық талдау құралдары: Бұл құралдар бағдарламалық жасақтаманың орындалып жатқан кезіндегі мінез-құлқын талдап, бастапқы кодта көрінбейтін ақаулар мен осалдықтарды анықтайды. Динамикалық талдау құралдарын өнімділікке, жад пайдалануына және қауіпсіздікке байланысты мәселелерді анықтау үшін пайдалануға болады. [25] Fuzz тестілеу құралдары: Бұл құралдар күтпеген немесе бұрмаланған деректерге төзімділігін тексеру үшін бағдарламалық қосымшаға кездейсоқ деректерді жібереді. Fuzz тестілеу құралдарын деректерді растау, жад басқару және қауіпсіздікке байланысты мәселелерді анықтау үшін пайдалануға болады. [25] Енгізуді тексеру құралдары: Бұл құралдар шабуылдаушылар пайдалана алатын осалдықтарды анықтау үшін бағдарламалық қосымшаға шабуыл жасауды симуляциялайды. Енгізуді тексеру құралдары SQL инъекциясы, сайттар аралық скрипттер және буфер асығу сияқты қауіпсіздікке байланысты мәселелерді анықтау үшін пайдаланылуы мүмкін. Сынақтарды басқару құралдары: Бұл құралдар бағдарламалық қамтамасыз етуді сынау процесін басқару үшін қолданылады, соның ішінде сынақ жағдайларын жасау, орындау және есеп беру. Сынақтарды басқару құралдары барлық қажетті сынақтардың жүргізілуін, ақаулардың анықталып, жойылуын қамтамасыз етуге көмектеседі. [24]
Artificial intelligence (AI) is increasingly being used in software assurance to identify and address defects and vulnerabilities in software code. AI techniques such as machine learning and natural language processing can be used to automate testing and verification processes, making them faster and more efficient. Static analysis tools: These tools analyze the source code of a software application without executing it, to identify potential defects or vulnerabilities. Static analysis tools can be used to detect issues related to code quality, security, and compliance with coding standards. Dynamic analysis tools: These tools analyze the behavior of a software application while it is running, to identify defects or vulnerabilities that may not be apparent in the source code. Dynamic analysis tools can be used to detect issues related to performance, memory usage, and security. [25]
Fuzz testing tools: These tools generate random input to a software application, to test its resilience to unexpected or malformed data. Fuzz testing tools can be used to detect issues related to input validation, memory management, and security. [25]
Penetration testing tools: These tools simulate attacks on a software application, to identify vulnerabilities that could be exploited by attackers. Penetration testing tools can be used to detect issues related to security, such as SQL injection, cross site scripting, and buffer overflows. Test management tools: These tools are used to manage the software testing process, including test case creation, execution, and reporting. Test management tools can help to ensure that all required tests are conducted, and that defects are tracked and resolved. [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-қа сәйкес, бағдарламалық қамтамасыз етуді қамтамасыз ету – бұл бағдарламалық қамтамасыз ету, аппараттық құралдар мен қызметтердің қасақана және қасақана емес осалдықтардан бос екендігіне және бағдарламалық қамтамасыз етудің күтілгендей жұмыс істейтіндігіне сенімділік.