Kategoriju arhīvi: Drošība

Publikācijas par IT drošības tēmu.

Milesight IP drošības kameru ievainojamības

Līdz ar lietu interneta popularitātes pieaugumu, IP videonovērošanas kameru ražošanas process tuvinās lietu interneta, nevis drošības iekārtu izstrādei. Tas noved pie būtiskām ievainojamībām kritiski svarīgās sistēmās.

Mūsu vadošais pētnieks Kirils Solovjovs piedalījās CERT.LV un ISACA Latvijas nodaļas rīkotajā ikgadējā IT drošības konferencē „Kiberšahs 2016”, kur stāstīja par būtiskajām ievainojamībām, ko atklājis Milesight IP videonovērošanas kameru programmatūrā (CVE-2016-2356, CVE-2016-2357, CVE-2016-2358, CVE-2016-2359, CVE-2016-2360). Kirils sadarbībā ar CERT.LV veica ievainojamību pārbaudi vienā valsts iestādē un konstatēja, ka tajā izvietotas simtiem ievainojamu IP videonovērošanas kameru.

Ņemot vērā to, ka kameru ražotājs atrodas citā valstī, viņš uzsāka starpvalstu atbildīgas atklāšanas procesu, tajā pakāpeniski iesaistot ražotāju, CERT.LV, kameru lietotāju, uzstādītāju, HackerOne, Inc. un CERT/CC.

Prezentācija aptver atklāto ievainojamību tehniskos aspektus, atziņas no starpvalstu atbildīgas atklāšanas procesa, un rekomendācijas speciālistiem, drošības vadītājiem, kā arī atbildīgas atklāšanas politikas veidotājiem. Pieejams arī videoieraksts no konferences (angļu valodā).

Atbildīgas ievainojamību atklāšanas politikas ieviešana

Jānis Jansons iepriekš jau rakstīja par izaicinājumiem, kas saistās ar atbildīgu ievainojamību atklāšanu. Šoreiz stāstīšu par to, kā un kāpēc Latvijā varētu ieviest Atbildīgas ievainojamību atklāšanas politiku. Aicinu lasītājus padomāt un sniegt savu viedokli par publikācijā iekļautajām tēzēm un jautājumiem!

Lasīt tālāk

Drošības problēma Rīgas Satiksmes biļešu sistēmā “E-talons”

Turpinot iesākto sabiedriski nozīmīgu informācijas sistēmu drošības pārbaudes, ar mērķi uzlabot šo sistēmu drošību, paziņojam par PSIA “Rīgas satiksme” braukšanas apmaksas sistēmas “E-talons” drošības ievainojamību.

Pateicoties šai ievainojamībai, iespējams ar vienu vienīgu “dzelteno” papīra e-talonu braukt bezgalīgu skaitu reižu.
Lasīt tālāk

Par atbildīgu drošības incidentu atklāšanu

Informācijas sistēmas mūsdienās glabā prātam neaptverami daudz datu. Liela daļa no tiem ir lietotāju dati, turklāt arvien vairāk cilvēku sāk apzināties informācijas cenu, kā arī to, cik svarīgi saglabāt tās privātumu. Ne velti gan lielas kompānijas, gan ļaunprāši ir gatavi maksāt milzu naudu par citu personu datiem. Tas ir viens no iemesliem, kāpēc ir svarīgi rūpēties par informācijas drošību.

Diemžēl Austrumeiropā, t.sk. Latvijā, daudziem uzņēmējiem un IT nozares speciālistiem nav veselīga attieksme pret informācijas drošību. Turklāt problēma slēpjas ne tikai drošības auditu kvalitātē vai programmatūras testēšanas neesamībā, bet arī attieksmē, informējot vai neinformējot lietotājus par atklātajām problēmām.

Saprotams, ka uzņēmumiem un iestādēm šī var būt sāpīga tēma un tie varbūt nevēlēsies par to neko dzirdēt. Taču tās ir lietas, par kurām ir jārunā, tāpēc šajā rakstā es izklāstīšu savu personīgo viedokli, par to, kāpēc IT drošības problēmas ir jārisina, turklāt atbildīgi.

Lasīt tālāk

Tehniskā informācija par e-maks.lv ievainojamību

rakstījām iepriekš, sistēmā e-maks.lv, ko izstrādā Rīgas Karte SIA, tika atklāta nopietna drošības ievainojamība. Šis raksts satur tehnisko informāciju par ievainojamību.

Pirmā metode

Adresē https://e-maks.lv/etickets/transfer, laukā “veikt pārskaitījumu citam lietotājam“, ievadot savu e-pasta adresi un negatīvu valūtas daudzumu, bija iespējams papildināt savu kontu par summu, kas vienāda ar ievadītā valūtas daudzuma moduli. Piemēram, norādot vērtību “-100”, konts tika papildināts par “100” vienībām.

emaks-negparsk

Tas notika tāpēc, ka nepieciešamā summa maksātāja kontā tika momentā rezervēta. Pēc tam, kad saņēmējs apstiprināja pārskaitījumu, saņēmēja konts tika “papildināts” par negatīvo summu, bet sūtītāja konta stāvoklis atgriezās iepriekšējā stāvoklī.

Kamēr saņēmējs vēl nebija apstiprinājis maksājumu, pozitīvo atlikumu varēja pārskaitīt trešajam lietotājam, kas to apstiprinātu, rezultātā iegūstot norādīto naudas daudzumu.

Šo pašu metodi varēja izmantot, lai izmānītu naudu no citiem sistēmas lietotājiem. Iespējams, ka ne visi lietotāji saprastu negatīvas summas nozīmi un apstiprinātu šo maksājumu, tādā veidā pazaudējot naudu no sava konta.

Otrā metode

Naudas saņēmējs sadaļā https://e-maks.lv/etickets/messages varēja noskaidrot pārskaitījuma numuru, kuru nosūtot uz https://e-maks.lv/etickets/messages/numurs/tconfirm, pirmo reizi tika apstiprināts maksājums, bet katrā nākamajā reizē varēja saņemt naudas summu, kas norādīta pārskaitījumā, turklāt tā netika noņemta no sūtītāja konta. Savukārt atkārtoti atverot saiti https://e-maks.lv/etickets/messages/numurs/tcancel, nauda tika papildināta sūtītāja kontā.

emaks-pazin

Šo metodi varēja izmantot arī tad, ja naudu sūtīja sev. Tādā gadījumā atverot https://e-maks.lv/etickets/messages/numurs/tcancel, sākumā tika atgriezts rezervētais naudas daudzums, bet, atkārtojot pieprasījumu uz saiti, tika pieskaitīts pārskaitījumā norādītais naudas daudzums.

Skolēni, izmantojot e-maks.lv, varēja kļūt par miljonāriem

Uzreiz pēc sistēmas ieviešamas, atklājām nopietnu ievainojamību jaunajā e-maks.lv, ko izstrādā Rīgas Karte SIA. Šī sistēma ir pirmais solis Rīgas Satiksmes / Rīgas Kartes sabiedriskā transporta E-talonu funkcionalitātes papildināšanā, ļaujot ar to norēķināties ārpus transportlīdzekļiem. Ikviens, izmantojot e-pasta adresi, var reģistrēties šajā sistēmā.

Izmantojot atklātās ievainojamības, bija iespējams palielināt konta atlikumu, kā arī, zinot cita lietotāja e-pasta adresi, iegūt konta atlikumu no cita lietotāja. Par ievainojamību februāra sākumā informējām CERT.LV un neilgu laiku pēc tam tā tika novērsta.

Iedomāsimies šādu scenāriju, kāds līdz šim tiešām bija iespējams:

Andrim kāds pačukstējis, kā kļūt par miljonāru 5 minūšu laikā. Viņš iegāja savā elektroniskajā makā e-maks.lv, un atvēra konta papildināšanas sadaļu. Pat, ja viņa kontā bija tukšums, sistēma ļāva Andrim nosūtīt “mīnus 23 000 000” naudiņas Kārlim; šīs darbības rezultātā Andra konta atlikums tika papildināts par “23 000 000” naudiņām. Pirms sistēmas administrators to spēja pamanīt, Andris iegūtos līdzekļus aizsūtīja savam draugam Pēterim, kurš šo darbību akceptēja. Andris savu kontu izdzēsa un beigu beigās abi draugi summu sadalīja līdzīgās daļās.

emaks-atlikums

Interesē tehniskā informācija par ievainojamību?

Drošības ievainojamība OpenSSL bibliotēkā

heartbleedPētnieku grupa tikko atklājusi būtisku ievainojamību OpenSSL bibliotēku versijās 1.0.1, 1.0.1a-1.0.1.f un 1.0.2-beta.

Ievainojamība ietekmē pamatā tīmekļa serverus (t.sk. Apache un nginx) un balstās uz nepilnību TLS “heartbeat” paplašinājumā, kas paredzēts, lai nodrošinātu savienojumu noturību udp protokolā. Taču šis paplašinājums ir universāls un darbojas gan DTLS (udp), gan TLS (tcp) variantos.

Nu un? Ievainojamība ļauj jebkuram uzbrucējam iegūt līdz pat 65,5KB servera atmiņas. Atrast atmiņā kaut ko konkrētu, piemēram, servera atslēgu, ir laimes spēle, taču ar gana daudz mēģinājumiem… viss ir iespējams.

Trīs papildus faktori padara šo problēmu īpaši nepatīkamu:

  • OpenSSL (un tieši ievainojamās versijas) izmanto populārākie tīmekļa serveri;
  • uzbrukums notiek pēc tam, kad nodibināts droši šifrēts savienojums, tāpēc ir apgrūtināta uzbrukuma apturēšana tīkla līmenī;
  • esošā serveru programmatūra nekādā veidā nefiksē izdevušos uzbrukumu, tātad pēc tā nepaliek nekādas pēdas.

Šonakt esam izstrādājuši tīmekļa bāzētu rīku, kas ļaus novērtēt, vai Jūsu serverus ietekmē konkrētā ievainojamība. Neatkarīgi no pārbaudes rezultāta, iesakām visiem atjaunot OpenSSL bibliotēkas uz vismaz versiju 1.0.1g un pārliecināties, ka servera programmatūra izmanto šīs bibliotēkas jaunākās versijas.

Piedāvājam iepazīties ar ievainojamības tehnisko aprakstu.

Nederīgo dokumentu reģistra nepilnība

ndr

Iekšlietu ministrijas Informācijas centrs nodrošina pakalpojumu, kas ļauj noskaidrot, vai konkrēts dokuments ir anulēts, pazaudēts utml. (iekļauts Nederīgo dokumentu reģistrā). Lai ierobežotu automatizētu informācijas ieguvi no reģistra, lietotnes izstrādātājs tai ir pievienojis drošības kodu (CAPTCHA), kas obligāti jāievada, lai pieprasītu datus. Šī drošības koda realizācijā ir atklāta būtiska nepilnība. Pašu nepilnību gan raksturojam kā zemas prioritātes, ņemot vērā, ka drošības koda esamība kā tāda nav vitāli nepieciešama konkrētā pakalpojuma nodrošināšanai.

Tehniskais apraksts

Drošības kods ir PHP skripts, kas atgriež JPEG attēlu un uzstāda sīkdatni ar nosaukumu “lriem_secure”. Nepilnības atklāšanas brīdī sīkdatnē ASCII formā atradās tas pats skaitlis, kas attēlā. Turklāt analīze liecināja, ka koda pārbaude tika realizēta šādi.

$_COOKIE['lriem_secure']==$_POST['seccode']

Kodu bija iespējams nolasīt no sīkdatnes vai tik pat labi nosūtīt patvaļīga satura sīkdatni kopā ar to pašu informāciju POST masīvā.

Rekomendācijas un komentāri

Nepilnības novēršanai ieteicām lietot PHP sesijas, kas ļautu sīkdatnē glabāt nesaistītu jaucējskaitli, bet pašu drošības kodu jau glabāt sesijā, pret ko tad arī varētu veikt salīdzināšanu. Vienlaikus ilgtermiņā ieteicām attiekties no drošības koda lietošanas, ierobežojot pieprasījumu skaitu laika vienībā.

6. novembrī aplikācijas kodā tika veiktas izmaiņas — ieviesta funkcija, kas visdrīzāk realizēta kā f($a):=md5($key1.$a.$key2); tagad lriem_secure tiek uzstādīts uz f($kods) un salīdzināšana tiek veikta attiecīgi

$_COOKIE['lriem_secure']==f($_POST['seccode'])

Šis, protams, joprojām nekādā veidā nepasargā no atkārtošanas uzbrukumiem (replay attacks) — atliek vien ievadā padod datu pāri, kas apmierina augšminēto sakarību.

Aplikācijas kodā norādīts, ka tās autors ir “Maris Melnikovs”, savukārt publiskās datu bāzes liecina, ka cilvēks ar ļoti līdzīgu vārdu Iekšlietu ministrijā ir nostrādājis aptuveni pus gadu, par to saņemot diezgan pieklājīgu atalgojumu, taču šobrīd vairs valsts iestādēs nestrādā. Aplikācijas autora nepieejamība varētu izskaidrot to, kāpēc netika ņemtas vērā mūsu rekomendācijas nepilnības labošanai.

Atkāpe par vizuālajiem drošības kodiem (CAPTCHA)

captcha

Nav nekāds pārsteigums, ka vizuālie drošības kodi ne tikai nav efektīvs līdzeklis, lai ierobežotu automatizētu rīku darbību, jo tos vienmēr iespējams atpazīt ar vairāk vai mazāk speciālu programmatūru, bet arī stipri apgrūtina leģitīmu lietotāju darbu. Eksistē vairākas alternatīvas kā panākt, ka automatizēti rīki nenoslogo servera resursus. Viena no tām aprakstīta zemāk.

Datoram nav svarīgi, kas sēž pie klaviatūras. Tas redz tikai mūsu darbības, bet nevērtē, kas mēs esam. Programmētājiem no tā vajadzētu iemācīties vienu svarīgi lietu — nav svarīgi, kas veic darbību; svarīgi ir, kāda darbība tiek veikta. Tāpēc mēs no sirds rekomendējam CAPTCHA vietā izvēlēties veikt lietotāja uzvedības (statistisko) analīzi, kā tas, piemēram, realizēts 02.lv īsziņu sūtīšanas pakalpojumā.

Ja jums nepieciešama palīdzība, lai CAPTCHA vietā ieviestu saprātīgāku drošības risinājumu, tad būsim priecīgi palīdzēt.

Interesanta “funkcija” Swedbank mobilajā aplikācijā

Pārbaudot Swedbank mobilās aplikācijas drošību, tika atklāta interesanta kļūme, kas ļauj iegūt klienta vārdu un uzvārdu, ja zināms lietotāja numurs un pastāvīgā parole. Lai gan personas datu iegūšanai nepietiek ar lietotāja numuru vien, tomēr standarta autorizācijas gadījumos (bankas mājaslapa, banklink utml.) klienta dati netiek izpausti, kamēr netiek ievadīts kods no kalkulatora vai kodu kartes.

Kombinējot šo informāciju ar klienta kontu sarakstu un atlikumiem, kas iegūstami izmantojot banklink, tiek plaši pavērtas durvis sociālās inženierijas uzbrukumiem.

Tehniskais apraksts

Mobilās aplikācijas izsaukumi tiek nosūtīti kā GET pieprasījumi uz adresi https://ib.swedbank.lv/touch/, turklāt svarīgi, ka User-Agent ir jāsatur, piemēram, vārds “Android”.

Pirmais pieprasījums ir https://ib.swedbank.lv/touch/auth?authenticate=true&language=ENG&mobileIdLogin=false&authPwd=pp&userId=nn, kur aa ir lietotāja numurs, bet pp ir lietotāja pastāvīgā parole. Korektu datu ievades gadījumā atbildē tiks saņemta json virkne

{"challenge":"cc","sessionId":"ss","securityId":"dd","loginType":3,"securityLevel":1}

Tajā cc ir drošības koda numurs, kas lietotājam nākamajā solī būtu jāievada no kodu kartes, ss ir sesijas identifikators, bet dd ir drošības identifikators. Ja klients lieto kodu kalkulatoru, nevis kodu karti, tad “challenge” netiek uzstādīts un “loginType” vērtība ir cita.

Uzmanības vērts ir fakts, ka, lai gan internetbankas mājaslapā klientam pieprasītais drošības koda numurs tiek parādīts kā attēls (drošības apsvērumi?), tomēr veicot pieprasījumu caur https://ib.swedbank.lv/touch/ šis pats koda numurs tiek nosūtīts kā ASCII teksts. Tāpat interesanti, ka parole tiek nosūtīta GET pieprasījumā, kas nozīmē, ka atkarībā no aplikācijas servera konfigurācijas, iespējams, žurnālfailos glabājas visu mobilās aplikācijas lietotāju paroles.

Lai iegūtu klienta vārdu un uzvārdu, ir jānovirzās no standarta komunikācijas plūsmas, nekavējoties veicot pieprasījumu https://ib.swedbank.lv/touch/overview;jsessionid=ss?securityId=dd, ko aplikācijas serveris šajā brīdī negaida. Šim pieprasījumam svarīgi, lai klientā būtu uzstādīta sīkdatne Swedbank-Embedded=android-app-3.2. Kā atbilde tiek nosūtīts kļūdas paziņojums HTML lapas veidā, kurā iekļauts JavaScript koda gabaliņš. Šis kods satur masīvu sessionInfo.

     var sessionInfo = {
        jsessionId: 'ss',
        securityId: 'dd',
        securityLevel: 1,
        customerName: 'Alberts Kviesis',
        allowSingleSessionDefined: true,
        allowSingleSession: false,
        hasPrivateAccounts: false,
        hasBusinessAccounts: false,
        disclaimerAccepted: false,
        passwordChangeRequired: false
      }

Indekss “customerName” satur klienta vārdu un uzvārdu, tam sekojošie indeksi droši vien neatspoguļo patieso situāciju.

Reakcija

Par problēmu 23. oktobrī ziņojām bankai un CERT.LV. Informācija pirmo reizi paziņota publiski 12 dienas vēlāk — 4. novembrī. Saskaņā ar atbildīgo darbinieku komentāriem, šāda mobilās aplikācijas servera uzvedība atbilst specifikācijai un netikšot mainīta. Mēs centīsimies turpināt aplikācijas drošības pārbaudi un, atklājot nepilnības, ziņosim par tām iesaistītajām pusēm.

“BITE megaprieku kontroles rīka” drošība

Pirms pāris mēnešiem viens no Latvijas mobilo sakaru operatoriem Bite publicēja programmu “BITE megaprieku kontroles rīks”. Šī programma, kas paredzēta lietošanai Android viedtālruņos, ļauj aplūkot savu iztērēto datu apjomu šajā mēnesī, kā arī aprēķina plānotās izmaksas.

Autorizēšanās

Ekrānšāviņš no kontroles rīka pirmās versijas.

Ekrānšāviņš no kontroles rīka pirmās versijas.

Lai saņemtu informāciju par datu apjoma patēriņu, aplikācijai jāsaņem autorizācijas kods no Bites servera, ko sākumā varēja saņemt divos veidos:

  1. Izvēloties kontaktu, Bite tam nosūtīja SMS ar drošības kodu, ko jāievada aplikācijas autorizācijas logā, kas tad tika nosūtīts Bites serverim, atbildē saņemot autorizācijas kodu.
  2. Izvēloties “Savs numurs”, aplikācija Bites serverim nosūtīja abonenta IMSI, pretī saņemot autorizācijas kodu.

Tehniskā puse

Autorizēšanās un informācijas saņemšanas pieprasījumi JSON formātā tiek nosūtīti uz adresi https://213.226.139.54/prest/android.json.

Tā kā sertifikāta domēns neatbilst IP adresei, aplikācijā ir izslēgta domēna atbilstības pārbaude:

.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

Autorizēšanās pieprasījums savam numuram izskatās šādi:

{"id":aaa,"jsonrpc":"2.0","method":"authIMSI",
"params":{"password":null,"imsi":"bbb"}}

Atbilde uz to (ddd ir klienta mobilā telefona numurs):

{"jsonrpc":"2.0","id":aaa,"result":
{"securityKey":"ccc","msisdn":"ddd"}}

Informācijas ieguves pieprasījums:

{"id":aaa2,"jsonrpc":"2.0","method":"getData",
"params":{"securityKey":"ccc"}}

Atbildes piemērs:

{"jsonrpc":"2.0","id":aaa2,"result":
{"customerAmount":"0.5000","customerCurrency":"Ls",
"customerDataUsage":"510","customerType":"POSTPAID",
"customerRoamDataUsage":"0","customerstatus":"ACTIVE",
"customerRatePlanExp":"2013-12-31 23:59:59",
"customerBalanceExp":"","customerIsInRoaming":"0"}}

Kā redzams, atbildē ir ietverti šādi dati: patērētais interneta datu apjoms, tarifu plāna nosaukums un veids, kā arī derīguma termiņš.

Problēmas

IMSI netiek ģenerēti nejauši, bet secīgi, tāpēc, nosūtot IMSI numurus vienu pēc otra, uz daļu no pieprasījumiem tiek saņemti derīgi autorizācijas kodi un telefona numuri.

Kad aplikācija vai uzbrucējs ir ieguvis “securityKey”, tas paliek derīgs pat tad, ja konkrētam telefona numuram tiek pieprasīts jauns kods. Tātad, ja Jūsu telefons īsu brīdi ir uzbrucēja kontrolē, tas var iegūt SMS drošības kodu un līdz ar to arī derīgu “securityKey”, ko nav iespējams atcelt izmantojot “megaprieku” uzskaites programmu. Bet ņemot vērā sekojošo informāciju, esmu drošs, ka piezvanot BITE atbalsta dienestam, to tehniski vajadzētu varēt izdarīt.

Atrisinājums

Par problēmu 12. septembrī ziņojām CERT.LV, lai viņi tālāk koordinētu ievainojamības novēršanu.

19. septembrī Play Store parādījās jauna programmas versija, kurā problemātiskais autorizācijas veids vairs nebija pieejams. Saskaņā ar mums pieejamo informāciju vecie drošības kodi ir deaktivēti un vairs nav izmantojami informācijas iegūšanai.

Par atrasto problēmu publiski paziņojām 23. oktobrī, ISACA Latvijas nodaļas un CERT.LV rīkotajā IT drošības konferencē
„Mūsu informācijas drošība – nākotnes panākumu atslēga”.

Sargiet savus telefonus!