Fa'afefea ona tusi tulafono mo Checkmarx ae aua le fa'avalevalea

Ei Habr!

I la matou galuega, e masani ona faʻatautaia e le matou kamupani le tele o mea faigaluega suʻesuʻe numera (SAST). Mai le pusa latou te galulue uma i le averesi. Ioe, e faalagolago uma lava i le poloketi ma tekinolosi o loʻo faʻaaogaina i totonu, faʻapea foʻi ma le lelei o nei tekinolosi e aofia ai tulafono o suʻesuʻega. I loʻu manatu, o se tasi o taʻiala sili ona taua pe a filifilia se meafaigaluega SAST o le mafai lea ona faʻavasegaina i faʻamatalaga patino o au talosaga, e pei o, tusi ma suia tulafono faʻatalanoaga poʻo, e pei ona masani ona taʻua, Custom Queries.

Fa'afefea ona tusi tulafono mo Checkmarx ae aua le fa'avalevalea

E masani ona matou faʻaaogaina Checkmarx - o se suʻesuʻega tulafono sili ona manaia ma mamana. I lenei tusiga o le a ou talanoa e uiga i loʻu poto masani i le tusiaina o tulafono auiliiliga mo ia.

Lisi o Mataupu

ulufalega

I le amataga, ou te fia fautuaina se tasi o nai tala i le gagana Rusia e uiga i foliga o le tusiaina o fesili mo Checkmarx. Na lomia i luga o Habré i le faaiuga o le 2019 i lalo o le ulutala: "Talofa, Checkmarx!" Fa'afefea ona tusi se fesili Checkmarx SAST ma su'e ni fa'afitauli vaivai.

O lo'o su'esu'eina au'ili'ili pe fa'apefea ona tusia fa'amatalaga muamua ile CxQL (Checkmarx Query Language) mo nisi su'ega su'ega ma fa'aalia ai ta'iala fa'avae o le fa'aogaina o tulafono o su'esu'ega.

O le a ou le toe faia le mea o loʻo faʻamatalaina i totonu, e ui lava o loʻo iai pea nisi o fesoʻotaʻiga. I laʻu tusiga o le a ou taumafai e faʻapipiʻi se ituaiga o "aoina o fua", o se lisi o fofo i faʻafitauli faʻapitoa na ou feagai i le taimi o laʻu galuega ma Checkmarx. Sa tatau ona ou mafaufau i le tele o nei faafitauli. O nisi taimi sa le lava faʻamatalaga i totonu o faʻamaumauga, ma o nisi taimi sa faigata ona malamalama pe faʻapefea ona fai le mea e manaʻomia. Ou te faʻamoemoe o le a le faʻaumatia loʻu poto masani ma po e leai se moe, ma o lenei "aoina o faʻataʻitaʻiga Faʻamatalaga Faʻapitoa" o le a faʻaolaina ai oe mo ni nai itula poʻo ni nai sela neura. O lea, tatou amata!

Fa'amatalaga lautele i tulafono

Muamua, seʻi o tatou vaʻavaʻai i nai manatu faʻavae ma le faʻagasologa o le galue ma tulafono, mo se malamalamaga sili atu i le mea o le a sosoo ai. Ma talu ai ona o le faʻamaumauga e le o fai mai se mea e uiga i lenei mea pe faʻasalalau tele i totonu o le fausaga, lea e le faigofie tele.

  1. O tulafono e faʻaaogaina i le taimi o suʻesuʻega e faʻatatau i le seti na filifilia i le amataga (se seti o tulafono faʻamalosi). E mafai ona e fatuina se numera e le faʻatapulaʻaina o faʻasologa, ma le auala tonu e faʻatulagaina ai e faʻalagolago i faʻamatalaga o lau gaioiga. E mafai ona e fa'avasegaina i latou i le gagana pe filifili fa'asologa mo galuega ta'itasi. Ole numera o tulafono faʻamalosi e aʻafia ai le saoasaoa ma le saʻo o le suʻega.

    Fa'afefea ona tusi tulafono mo Checkmarx ae aua le fa'avalevaleaFa'atūina Fa'atonu i le fa'aoga Checkmarx

  2. O tulafono e faʻatonutonuina i se meafaigaluega faʻapitoa e taʻua o le CxAuditor. Ole polokalame ole desktop lea e fa'afeso'ota'i ile 'au'aunaga o lo'o fa'agaoioia Checkmarx. O lenei meafaigaluega e lua auala o le faʻagaioiga: faʻatonutonu tulafono ma auʻiliʻili iʻuga o se faʻataʻitaʻiga ua uma ona faia.

    Fa'afefea ona tusi tulafono mo Checkmarx ae aua le fa'avalevaleaCxAudit fa'aoga

  3. O tulafono ile Checkmarx e vaevaeina ile gagana, o lona uiga, e tofu gagana ma ana lava seti o fesili. E iai fo'i nisi o tulafono lautele e fa'atatau e tusa lava po'o le a le gagana, o mea ia e ta'ua o fesili fa'avae. Mo le tele o vaega, o fesili fa'avae e aofia ai le su'eina o fa'amatalaga e fa'aoga e isi tulafono.

    Fa'afefea ona tusi tulafono mo Checkmarx ae aua le fa'avalevaleaVaevae tulafono i le gagana

  4. Tulafono e “Fa'atinoina” ma le “E le mafai ona fa'atinoina” (Fa'atino ae le Fa'atinoina). E le o le igoa saʻo, i loʻu manatu, ae o le mea lena. O le laina pito i lalo o le taunuuga o le faʻatinoina o tulafono "Executable" o le a faʻaalia i le faʻataʻitaʻiga iʻuga i le UI, ma o le "Non-Executable" tulafono e manaʻomia naʻo le faʻaaogaina o latou taunuuga i isi talosaga (i lona uiga, naʻo se galuega).

    Fa'afefea ona tusi tulafono mo Checkmarx ae aua le fa'avalevaleaFuaina o le ituaiga tulafono pe a fai

  5. E mafai ona e faia ni tulafono fou pe fa'aopoopo/toe tusi tulafono o iai. Ina ia toe tusia se tulafono, e tatau ona e mauaina i totonu o le laau, kiliki-saʻo ma filifili "Override" mai le lisi pa'ū. E taua le manatua iinei o tulafono fou e le o aofia muamua i faʻasologa ma e le o toaga. Ina ia amata faʻaaogaina i latou e te manaʻomia e faʻagaoioia i latou i le lisi "Preset Manager" i le meafaigaluega. O tulafono toe tusia e tumau pea o latou faatulagaga, o lona uiga, afai o loʻo galue le tulafono, o le a tumau ma o le a faʻaaogaina vave.

    Fa'afefea ona tusi tulafono mo Checkmarx ae aua le fa'avalevaleaFa'ata'ita'iga o se tulafono fou i le fa'aoga Fa'atonu Pule

  6. I le taimi o le faʻatinoga, o se "laau" o talosaga e fausia, lea e faʻalagolago i le a. O tulafono e aoina ai faʻamatalaga e faʻatinoina muamua, ma i latou e faʻaaogaina lona lua. O le faʻataunuʻuga o loʻo faʻapipiʻiina, o lea afai e mafai ona faʻaaogaina iʻuga o se tulafono o loʻo i ai, e sili atu le faia, o le a faʻaitiitia ai le taimi suʻesuʻe.

  7. E mafai ona fa'aoga tulafono i tulaga eseese:

  • Mo le faiga atoa - o le a faʻaaogaina mo soʻo se suʻesuʻega o soʻo se poloketi

  • I le tulaga o le 'au (Team) - o le a na'o le fa'aaogaina e su'e ai galuega faatino i le 'au filifilia.

  • I le tulaga o le poloketi - O le a faʻaaogaina i se galuega faʻapitoa

    Fa'afefea ona tusi tulafono mo Checkmarx ae aua le fa'avalevaleaFuafuaina o le tulaga o le a faaaoga ai le tulafono

“Lomifefiloi” mo tagata amata

Ma o le a ou amata i ni nai mea na mafua ai ona ou fesili, ma o le a ou faʻaalia foi le tele o auala e faʻafaigofie ai le olaga.

Galuega fa'atasi ma lisi

- вычитание одного из другого (list2 - list1)
* пересечение списков (list1 * list2)
+ сложение списков (list1 + list2)

& (логическое И) - объединяет списки по совпадению (list1 & list2), аналогично пересечению (list1 * list2)
| (логическое ИЛИ) - объединяет списки по широкому поиску (list1 | list2)

Со списками не работает:  ^  &&  ||  %  / 

Mea uma na maua

I totonu o le gagana suʻesuʻe, e mafai ona e mauaina se lisi o elemene uma na faʻaalia e Checkmarx ( manoa, galuega, vasega, metotia, ma isi). O nisi nei avanoa o mea faitino e mafai ona fa'aogaina All. O lona uiga, e su'e se mea e iai se igoa patino searchMe, e mafai ona e su'e, mo se fa'ata'ita'iga, i le igoa i mea uma na maua:

// Такой запрос выдаст все элементы
result = All;

// Такой запрос выдаст все элементы, в имени которых присутствует “searchMe“
result = All.FindByName("searchMe");

Ae, afai e te manaʻomia le suʻeina i se isi gagana e leʻi aofia ai i le suʻesuʻega mo nisi mafuaʻaga (mo se faʻataʻitaʻiga, groovy i se poloketi Android), e mafai ona e faʻalauteleina le avanoa avanoa e ala i se fesuiaiga:

result = AllMembers.All.FindByName("searchMe");

Galuega mo su'esu'ega o le tafe

O loʻo faʻaaogaina nei galuega i le tele o tulafono ma o se laupepa laʻititi laʻititi o latou uiga:

// Какие данные second влияют на first.
// Другими словами - ТО (second) что влияет на  МЕНЯ (first).
result = first.DataInfluencedBy(second);

// Какие данные first влияют на second.
// Другими словами - Я (first) влияю на ТО (second).
result = first.DataInfluencingOn(second);

Maua le igoa faila/ala

E tele uiga e mafai ona maua mai i'uga o se fesili (o le igoa o le faila lea na maua ai le mea e ulufale ai, manoa, ma isi), ae o le pepa e le o taʻu mai ai pe faapefea ona maua ma faʻaaogaina. O lea la, ina ia faia lenei mea, e te manaʻomia le mauaina o le LinePragma meatotino ma mea matou te manaʻomia o le a tuʻuina i totonu:

// Для примера найдем все методы
CxList methods = Find_Methods();

// В методах найдем по имени метод scope
CxList scope = methods.FindByName("scope");

// Таким образом можо получить путь к файлу
string current_filename = scope.GetFirstGraph().LinePragma.FileName;

// А вот таким - строку, где нашлось срабатывание
int current_line = scope.GetFirstGraph().LinePragma.Line;

// Эти параметры можно использовать по разному
// Например получить все объекты в файле
CxList inFile = All.FindByFileName(current_filename);

// Или найти что происходит в конкретной строке
CxList inLine = inFile.FindByPosition(current_line);

E taua le manatua o lena mea FileName o loʻo i ai moni le ala i le faila, talu ai na matou faʻaaogaina le metotia GetFirstGraph.

I'uga o le fa'atinoga

O loʻo i ai se fesuiaiga faʻapitoa i totonu o le CxQL result, lea e toe fa'afo'i mai ai le taunu'uga o le fa'atinoina o lau tulafono tusitusia. E amata vave lava ma e mafai ona e tusia i'uga i totonu, suia ma fa'amamāina a'o e galue. Ae, afai e leai se tofiga i lenei fesuiaiga poʻo galuega i totonu o le tulafono return- o le fa'ai'uga fa'ataunu'u o le a leai lava.

Ole fesili lea ole a le toe faafoi mai se mea ia i matou ona o le faʻataunuʻuina ma o le a gaogao i taimi uma:

// Находим элементы foo
CxList libraries = All.FindByName("foo");

Ae, i le tuʻuina atu o le faʻataunuʻuga iʻuga i le faʻailoga faʻapitoa, o le a tatou vaʻai pe o le a le mea e toe foʻi mai ia i tatou e lenei valaau:

// Находим элементы foo
CxList libraries = All.FindByName("foo");

// Выводим, как результат выполнения правила
result = libraries

// Или еще короче
result = All.FindByName("foo");

Fa'aaogā fa'ai'uga o isi tulafono

Tulafono i Checkmarx e mafai ona taʻua tutusa ma galuega i se gagana polokalame masani. A e tusia se tulafono, e mafai ona e faʻaogaina iʻuga o isi fesili. Mo se faʻataʻitaʻiga, e le manaʻomia le suʻeina o auala uma i le code i taimi uma, naʻo le valaʻau i le tulafono manaʻomia:

// Получаем результат выполнения другого правила
CxList methods = Find_Methods();

// Ищем внутри метод foo. 
// Второй параметр false означает, что ищем без чувствительности к регистру
result = methods.FindByShortName("foo", false);

O lenei auala e mafai ai e oe ona faʻapuupuu le code ma faʻaititia tele le taimi o le faʻatinoina o tulafono.

Fofo o faafitauli

Fa'amauina

A e galue ma le meafaigaluega, o nisi taimi e le mafai ona vave tusia le fesili manaʻomia ma e tatau ona e faʻataʻitaʻi, taumafai filifiliga eseese. Mo sea tulaga, o le meafaigaluega e tuʻuina atu logging, lea e taʻua e faapea:

// Находим что-то
CxList toLog = All.FindByShortName("log");

// Формируем строку и отправляем в лог
cxLog.WriteDebugMessage (“number of DOM elements =” + All.Count);

Ae e taua le manatuaina o lenei metotia e naʻo le taliaina o se faʻaoga manoa, o lea o le a le mafai ai ona faʻaalia se lisi atoa o elemene na maua o se taunuuga o le taotoga muamua. O le filifiliga lona lua, lea e faʻaaogaina mo le faʻapipiʻiina, o le tuʻuina atu lea i se fesuiaiga faʻapitoa mai lea taimi i lea taimi result le taunuuga o le fesili ma vaai po o le a le mea e tupu. O lenei faiga e le faigofie tele; e tatau ona e mautinoa e leai ni faʻalavelave poʻo ni gaioiga faʻatasi ma lenei mea i le code pe a uma. result pe na'o le fa'amatala le code i lalo. Pe mafai foi, pei o aʻu, galo e aveese le tele o ia telefoni mai se tulafono ua saunia ma mafaufau pe aisea e leai se mea e aoga.

O se auala sili atu ona faigofie o le valaʻau lea o le metotia return fa'atasi ai ma le fa'ailoga mana'omia. I lenei tulaga, o le faʻatinoina o le tulafono o le a faʻamutaina ma o le a mafai ona tatou vaʻai i le mea na tupu o se taunuuga o mea na matou tusia:

// Находим что-то
CxList toLog = All.FindByShortName("log");

// Выводим результат выполнения
return toLog

//Все, что написано дальше не будет выполнено
result = All.DataInfluencedBy(toLog)

Fa'afitauli ulufale

E i ai tulaga e le mafai ai ona e mauaina le meafaigaluega CxAudit (lea e faʻaaogaina e tusi ai tulafono). E mafai ona tele mafuaʻaga mo lenei mea, e aofia ai faʻalavelave, faʻafouga faʻafuaseʻi o Windows, BSOD ma isi tulaga e leʻi mafaufauina e le mafai ona tatou pulea. I lenei tulaga, o nisi taimi o loʻo i ai se sauniga e leʻi maeʻa i totonu o faʻamaumauga, lea e taofia ai oe mai le toe ulufale. Ina ia faʻaleleia, e manaʻomia ona e faia ni nai fesili:

Mo Checkmarx i luma ole 8.6:

// Проверяем, что есть залогиненые пользователи, выполнив запрос в БД
SELECT COUNT(*) FROM [CxDB].[dbo].LoggedinUser WHERE [ClientType] = 6;
 
// Если что-то есть, а на самом деле даже если и нет, попробовать выполнить запрос
DELETE FROM [CxDB].[dbo].LoggedinUser WHERE [ClientType] = 6;

Mo Checkmarx ina ua uma le 8.6:

// Проверяем, что есть залогиненые пользователи, выполнив запрос в БД
SELECT COUNT(*) FROM LoggedinUser WHERE (ClientType = 'Audit');
 
// Если что-то есть, а на самом деле даже если и нет, попробовать выполнить запрос
DELETE FROM [CxDB].[dbo].LoggedinUser WHERE (ClientType = 'Audit');

Tulafono tusitusia

O lea ua tatou oo atu i le vaega sili ona manaia. A amata ona e tusia tulafono i le CxQL, o mea e masani ona e le maua e le o le tele o faʻamaumauga e pei o ni faʻataʻitaʻiga ola o le foia o nisi faʻafitauli ma faʻamatalaina le faagasologa o le faʻatinoina o fesili i le lautele.

O le a ou taumafai e faʻafaigofie le olaga mo i latou o loʻo amata ona faʻafefe i le gagana fesili ma tuʻuina atu ni faʻataʻitaʻiga o le faʻaaogaina o Faʻamatalaga Faʻapitoa e foia ai nisi faʻafitauli. O nisi oi latou e matua lautele ma e mafai ona faʻaaogaina i lau kamupani e aunoa ma ni suiga, o isi e sili atu ona faʻapitoa, ae e mafai foi ona faʻaogaina e ala i le suia o le code e fetaui ma faʻamatalaga o au talosaga.

O lea la, o fa'afitauli ia e masani ona matou feagai:

O se galuega: E tele Flows i taunuʻuga o le faʻatinoina o le tulafono ma o se tasi oi latou o se faʻanofo o le isi, e tatau ona e tuʻua se tasi oi latou.

vaifofo: O le mea moni, o nisi taimi e fa'aalia ai e Checkmarx le tele o fa'amaumauga e ono fa'alava ma fa'apu'upu'u fa'amatalaga o isi. E i ai se auala faʻapitoa mo ia tulaga ReduceFlow. Fa'alagolago i le fa'amaufa'ailoga, o le a filifilia le Flow sili ona pu'upu'u pe umi:

// Оставить только длинные Flow
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceSmallFlow);

// Оставить только короткие Flow
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceBigFlow);

O se galuega: Fa'alautele le lisi o fa'amatalaga ma'ale'ale e tali atu i ai le meafaigaluega

vaifofo: E iai tulafono fa'avae a Checkmarx, o fa'ai'uga e fa'aaogaina e le tele o isi fesili. I le fa'aopoopoina o nisi o nei tulafono fa'atasi ma fa'amatalaga patino i lau talosaga, e mafai ona e fa'aleleia vave au fa'ai'uga. Lalo o se faʻataʻitaʻiga tulafono e te amata ai:

General_privacy_violation_list

Se'i o tatou fa'aopoopo ni nai fesuiaiga e fa'aaogaina i la tatou talosaga e teu ai fa'amatalaga ma'ale'ale:

// Получаем результат выполнения базового правила
result = base.General_privacy_violation_list();

// Ищем элементы, которые попадают под простые регулярные выражения. Можно дополнить характерными для вас паттернами.
CxList personalList = All.FindByShortNames(new List<string> {
	"*securityToken*", "*sessionId*"}, false);

// Добавляем к конечному результату
result.Add(personalList);

O se galuega: Faalautele le lisi o fesuiaiga ma upu faataga

vaifofo: Ou te fautuaina vave le gauai atu i le tulafono faavae mo le faʻamalamalamaina o upu faʻamaonia i le code ma faʻaopoopo i ai se lisi o igoa fesuiaʻi e masani ona faʻaaogaina i lau kamupani.

Password_privacy_violation_list

CxList allStrings = All.FindByType("String"); 
allStrings.Add(All.FindByType(typeof(StringLiteral))); 
allStrings.Add(Find_UnknownReference());
allStrings.Add(All.FindByType(typeof (Declarator)));
allStrings.Add(All.FindByType(typeof (MemberAccess)));
allStrings.Add(All.FindByType(typeof(EnumMemberDecl))); 
allStrings.Add(Find_Methods().FindByShortName("get*"));

// Дополняем дефолтный список переменных
List < string > pswdIncludeList = new List<string>{"*password*", "*psw", "psw*", "pwd*", "*pwd", "*authKey*", "pass*", "cipher*", "*cipher", "pass", "adgangskode", "benutzerkennwort", "chiffre", "clave", "codewort", "contrasena", "contrasenya", "geheimcode", "geslo", "heslo", "jelszo", "kennwort", "losenord", "losung", "losungswort", "lozinka", "modpas", "motdepasse", "parol", "parola", "parole", "pasahitza", "pasfhocal", "passe", "passord", "passwort", "pasvorto", "paswoord", "salasana", "schluessel", "schluesselwort", "senha", "sifre", "wachtwoord", "wagwoord", "watchword", "zugangswort", "PAROLACHIAVE", "PAROLA CHIAVE", "PAROLECHIAVI", "PAROLE CHIAVI", "paroladordine", "verschluesselt", "sisma",
                "pincode",
								"pin"};
								
List < string > pswdExcludeList = new List<string>{"*pass", "*passable*", "*passage*", "*passenger*", "*passer*", "*passing*", "*passion*", "*passive*", "*passover*", "*passport*", "*passed*", "*compass*", "*bypass*", "pass-through", "passthru", "passthrough", "passbytes", "passcount", "passratio"};

CxList tempResult = allStrings.FindByShortNames(pswdIncludeList, false);
CxList toRemove = tempResult.FindByShortNames(pswdExcludeList, false);
tempResult -= toRemove;
tempResult.Add(allStrings.FindByShortName("pass", false));

foreach (CxList r in tempResult)
{
	CSharpGraph g = r.data.GetByIndex(0) as CSharpGraph;
	if(g != null && g.ShortName != null && g.ShortName.Length < 50)
	{
		result.Add(r);
	}
}

O se galuega: Fa'aopoopo fa'ava'a fa'aoga e le o lagolagoina e Checkmarx

vaifofo: O fesili uma ile Checkmarx e vaevaeina ile gagana, o lea e tatau ai ona e fa'aopoopo tulafono mo gagana ta'itasi. O loo i lalo nisi o faataitaiga o ia tulafono.

Afai e fa'aogaina faletusi e fa'aopoopo pe sui ai galuega masani, e faigofie ona fa'aopoopo i le tulafono fa'avae. Ona aʻoaʻoina lea o tagata uma e faʻaaogaina e uiga i folasaga fou. Mo se faʻataʻitaʻiga, faletusi mo le taina i le Android o Timber ma Loggi. I totonu o le pusa autu, e leai ni tulafono mo le faʻamaonia o telefoni e le o ni polokalama, o lea afai e oʻo i totonu o le ogalaau se faʻaupuga poʻo se faʻamatalaga, matou te le iloa e uiga i ai. Se'i o tatou taumafai e fa'aopoopo fa'auigaga o ia metotia i tulafono a Checkmarx.

Fa'ata'ita'iga fa'ata'ita'iga fa'ata'ita'iga e fa'aaoga ai le faletusi Timber mo le fa'aputuina:

package com.death.timberdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import timber.log.Timber;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Timber.e("Error Message");
        Timber.d("Debug Message");

        Timber.tag("Some Different tag").e("And error message");
    }
}

Ma o se faʻataʻitaʻiga lea o se talosaga mo Checkmarx, lea o le a faʻatagaina oe e faʻaopoopo se faʻamatalaga o le valaʻau o metotia Timber e avea o se mea e alu ese ai mo faʻamatalaga mai le talosaga:

FindAndroidOutputs

// Получаем результат выполнения базового правила
result = base.Find_Android_Outputs();

// Дополняем вызовами, которые приходят из библиотеки Timber
CxList timber = All.FindByExactMemberAccess("Timber.*") +
    All.FindByShortName("Timber").GetMembersOfTarget();

// Добавляем к конечному результату
result.Add(timber);

Ma e mafai foʻi ona e faʻaopoopo i le tulafono tuaoi, ae o le mea lea e fesoʻotaʻi saʻo i le taina i totonu o le Android:

Su'eAndroidLog_Outputs

// Получаем результат выполнения базового правила
result = base.Find_Android_Log_Outputs();

// Дополняем вызовами, которые приходят из библиотеки Timber
result.Add(
  All.FindByExactMemberAccess("Timber.*") +
  All.FindByShortName("Timber").GetMembersOfTarget()
);

E le gata i lea, pe a faʻaoga faʻaoga Android Pule o Galuega mo galuega e le tutusa, o se manatu lelei le faʻaopopoina o le Checkmarx e uiga i lenei mea e ala i le faʻaopoopoina o se metotia mo le mauaina o faʻamatalaga mai le galuega. getInputData:

Su'eAndroidRead

// Получаем результат выполнения базового правила
result = base.Find_Android_Read();

// Дополняем вызовом функции getInputData, которая используется в WorkManager
CxList getInputData = All.FindByShortName("getInputData");

// Добавляем к конечному результату
result.Add(getInputData.GetMembersOfTarget());

O se galuega: Su'e mo fa'amatalaga ma'ale'ale ile plist mo poloketi iOS

vaifofo: E masani ona faʻaogaina e iOS faila faʻapitoa ma le faʻaopoopoga .plist e teu ai fesuiaiga eseese ma tau. O le teuina o faʻaupuga, faʻailoga, ki ma isi faʻamatalaga maʻaleʻale i nei faila e le fautuaina, aua e mafai ona aveese mai le masini e aunoa ma ni faʻafitauli.

Plist faila o loʻo i ai foliga e le o manino i le mata le lava, ae taua ia Checkmarx. Sei o tatou tusia se tulafono e suʻe ai faʻamatalaga tatou te manaʻomia ma taʻu mai ia i matou pe o faʻamaonia upu faʻamaonia poʻo faʻailoga i se mea.

O se faʻataʻitaʻiga o se faila, o loʻo i ai se faʻailoga mo fesoʻotaʻiga ma le auʻaunaga pito i tua:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>DeviceDictionary</key>
	<dict>
		<key>phone</key>
		<string>iPhone 6s</string>
	</dict>
	<key>privatekey</key>
	<string>MIICXAIBAAKBgQCqGKukO1De7zhZj6+</string>
</dict>
</plist>

Ma se tulafono mo Checkmarx, lea e tele ni nuances e tatau ona amanaia pe a tusia:

// Используем результат выполнения правила по поиску файлов plist, чтобы уменьшить время работы правила и 
CxList plist = Find_Plist_Elements();

// Инициализируем новую переменную
CxList dictionarySettings = All.NewCxList();

// Теперь добавим поиск всех интересующих нас значений. В дальнейшем можно расширять этот список.
// Для поиска значений, как ни странно, используется FindByMemberAccess - поиск обращений к методам. Второй параметр внутри функции, false, означает, что поиск нечувствителен к регистру
dictionarySettings.Add(plist.FindByMemberAccess("privatekey", false));
dictionarySettings.Add(plist.FindByMemberAccess("privatetoken", false));

// Для корректного поиска из-за особенностей структуры plist - нужно искать по типу "If statement"
CxList ifStatements = plist.FindByType(typeof(IfStmt));

// Добавляем в результат, перед этим получив родительский узел - для правильного отображения
result = dictionarySettings.FindByFathers(ifStatements);

O se galuega: Su'e fa'amatalaga ile XML

vaifofo: O le Checkmarx o loʻo i ai galuega faigofie mo le galue ma le XML ma le suʻeina o tulaga taua, faʻailoga, uiga ma isi mea. Ae, o le mea e leaga ai, sa i ai se mea sese i le faʻamaumauga ona e leai se faʻataʻitaʻiga e tasi e galue. E ui i le mea moni e faapea o lenei faaletonu ua aveesea i le lomiga aupito lata mai o le pepa aloaia, ia faaeteete pe afai e te faaaogaina lomiga muamua o pepa.

O se fa'ata'ita'iga le sa'o lea mai fa'amaumauga:

// Код работать не будет
result = All.FindXmlAttributesByNameAndValue("*.app", 8, “id”, "error- section", false, true);

O le iʻuga o le taumafaiga faʻataunuʻu, o le a matou maua se mea sese e All e leai se auala faapena ... Ma e moni lenei mea, talu ai o loʻo i ai se mea faʻapitoa, avanoa eseese mo le faʻaaogaina o galuega mo le galue ma XML - cxXPath. O le mea lea e foliga mai o le fesili saʻo e suʻe ai se faʻatulagaga i le Android e faʻatagaina ai le faʻaogaina o fefaʻatauaiga HTTP:

// Правильный вариант с использованием cxXPath
result = cxXPath.FindXmlAttributesByNameAndValue("*.xml", 8, "cleartextTrafficPermitted", "true", false, true);

Sei o tatou tilotilo i ai i sina auiliiliga, talu ai o le syntax mo galuega uma e tutusa, pe a uma ona e iloa se tasi, ona e manaʻomia lea e filifili le mea e te manaʻomia. O lea, faʻasolosolo e tusa ai ma tapulaʻa:

  • "*.xml"- ufimata o faila e suʻe

  • 8 — id o le gagana e fa'atatau i ai le tulafono

  • "cleartextTrafficPermitted"- igoa ole igoa ile xml

  • "true" - le taua o lenei uiga

  • false - fa'aogaina o fa'amatalaga masani pe a su'e

  • true - o lona uiga o le su'esu'ega o le a faia e le amana'ia ai mataupu, o lona uiga, mata'upu-le-mafaufau

Mo se faʻataʻitaʻiga, matou te faʻaogaina se tulafono e faʻamaonia ai le le saʻo, mai se tulaga saogalemu, faʻaogaina fesoʻotaʻiga fesoʻotaʻiga i le Android e faʻatagaina fesoʻotaʻiga ma le server e ala i le HTTP protocol. Faataitaiga o se faatulagaga o loo i ai se uiga cleartextTrafficPermitted ma le uiga true:

<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <trust-anchors>
            <certificates src="@raw/my_ca"/>
        </trust-anchors>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">secure.example.com</domain>
        </domain-config>
    </domain-config>
</network-security-config>

O se galuega: Fa'agata fa'ai'uga ile igoa faila/ala

vaifofo: I se tasi o galuega tetele e fesoʻotaʻi ma le atinaʻeina o se telefoni feaveaʻi mo le Android, na matou feagai ai ma faʻamatalaga sese o le tulafono e fuafua ai le faʻaogaina o le faʻaogaina. O le mea moni o le tulafono i fafo o le pusa e suʻe i le faila build.gradle se fa'atulagaga e nafa ma le fa'aogaina o tulafono fa'alilolilo mo le fa'amatu'uina o le tusi talosaga.

Ae i galuega tetele o nisi taimi e iai faila a tamaiti build.gradle, lea e faasino i faletusi o loo aofia i le galuega faatino. O le tulaga ese e tusa lava pe le faʻaalia e nei faila le manaʻomia o le faʻafefe, o le faʻatulagaina o le faila faʻapotopotoga matua o le a faʻaaogaina i le taimi o le tuʻufaʻatasia.

O le mea lea, o le galuega o le tipi ese lea o faʻalavelave i faila a tamaiti o loʻo i totonu o faletusi. E mafai ona iloa i latou i le i ai o le laina apply 'com.android.library'.

Fa'ata'ita'iga code mai le faila build.gradle, lea e fuafua ai le manaʻomia mo le faʻafefe:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    defaultConfig {
        ...
    }

    buildTypes {
        release {
            minifyEnabled true
            ...
        }
    }
}

dependencies {
  ...
}

Faataitaiga faila build.gradle mo se faletusi o loʻo aofia i totonu o le poloketi e le o iai lenei faʻatulagaga:

apply plugin: 'android-library'

dependencies {
  compile 'com.android.support:support-v4:18.0.+'
}

android {
  compileSdkVersion 14
  buildToolsVersion '17.0.0'
  ...
}

Ma le tulafono mo Checkmarx:

ProGuardObfuscationNotInUse

// Поиск метода release среди всех методов в Gradle файлах
CxList releaseMethod = Find_Gradle_Method("release");

// Все объекты из файлов build.gradle
CxList gradleBuildObjects = Find_Gradle_Build_Objects();

// Поиск того, что находится внутри метода "release" среди всех объектов из файлов build.gradle
CxList methodInvokesUnderRelease = gradleBuildObjects.FindByType(typeof(MethodInvokeExpr)).GetByAncs(releaseMethod);

// Ищем внутри gradle-файлов строку "com.android.library" - это значит, что данный файл относится к библиотеке и его необходимо исключить из правила
CxList android_library = gradleBuildObjects.FindByName("com.android.library");

// Инициализация пустого массива
List<string> libraries_path = new List<string> {};

// Проходим через все найденные "дочерние" файлы
foreach(CxList library in android_library)
{
    // Получаем путь к каждому файлу
	string file_name_library = library.GetFirstGraph().LinePragma.FileName;
    
    // Добавляем его в наш массив
	libraries_path.Add(file_name_library);
}

// Ищем все вызовы включения обфускации в релизных настройках
CxList minifyEnabled = methodInvokesUnderRelease.FindByShortName("minifyEnabled");

// Получаем параметры этих вызовов
CxList minifyValue = gradleBuildObjects.GetParameters(minifyEnabled, 0);

// Ищем среди них включенные
CxList minifyValueTrue = minifyValue.FindByShortName("true");

// Немного магии, если не нашли стандартным способом :D
if (minifyValueTrue.Count == 0) {
	minifyValue = minifyValue.FindByAbstractValue(abstractValue => abstractValue is TrueAbstractValue);
} else {
    // А если всё-таки нашли, то предыдущий результат и оставляем
	minifyValue = minifyValueTrue;	
}

// Если не нашлось таких методов
if (minifyValue.Count == 0)
{
    // Для более корректного отображения места срабатывания в файле ищем или buildTypes или android
	CxList tempResult = All.NewCxList();
	CxList buildTypes = Find_Gradle_Method("buildTypes");
	if (buildTypes.Count > 0) {
		tempResult = buildTypes;
	} else {
		tempResult = Find_Gradle_Method("android");
	}
	
	// Для каждого из найденных мест срабатывания проходим и определяем, дочерний или основной файлы сборки
	foreach(CxList res in tempResult)
	{
        // Определяем, в каком файле был найден buildType или android методы
		string file_name_result = res.GetFirstGraph().LinePragma.FileName;
        
        // Если такого файла нет в нашем списке "дочерних" файлов - значит это основной файл и его можно добавить в результат
		if (libraries_path.Contains(file_name_result) == false){
			result.Add(res);
		}
	}
}

O lenei faiga e mafai ona matua lautele ma aoga e le gata mo talosaga Android, ae faʻapea foʻi mo isi tulaga pe a manaʻomia ona e faʻamautinoa pe o se faʻaiʻuga o se faila patino.

O se galuega: Fa'aopoopo le lagolago mo se faletusi isi vaega pe a le lagolagoina atoatoa le syntax

vaifofo: Ole numera o fa'ava'a 'ese'ese o lo'o fa'aogaina ile fa'agasologa o le tusiaina ole code e na'o le siata. Ioe, Checkmarx e le masani ona iloa e uiga i lo latou i ai, ma o la matou galuega o le aʻoaʻoina lea ia malamalama o nisi metotia e patino lava i lenei faʻavae. O nisi taimi e faigata lenei mea i le mea moni e faʻaaogaina e faʻasalalauga igoa o galuega e masani ona masani ma e le mafai ona faʻamaonia le vaʻaia o se valaʻau faapitoa i se faletusi patino.

O le faigata o le syntax o ia faletusi e le masani ona iloa lelei ma e tatau ona e faʻataʻitaʻi e aloese mai le mauaina o se numera tele o mea sese. E tele filifiliga e fa'aleleia atili ai le sa'o o le su'ega ma fo'ia le fa'afitauli:

  • O le filifiliga muamua, matou te iloa mautinoa o loʻo faʻaaogaina le faletusi i se galuega faʻapitoa ma e mafai ona faʻaaogaina le tulafono i le tulaga o le au. Ae afai e filifili le 'au e fai se isi auala pe faʻaaoga ni faletusi e faʻapipiʻi ai igoa o galuega, e mafai ona tatou maua se ata e le manaia tele o le tele o mea sese.

  • O le filifiliga lona lua o le suʻeina lea o faila o loʻo faʻauluina manino mai ai le faletusi. Faatasi ai ma lenei auala, e mafai ona matou mautinoa o le faletusi matou te manaʻomia o loʻo faʻaaogaina tonu i lenei faila.

  • Ma o le filifiliga lona tolu o le faʻaogaina faʻatasi o auala e lua o loʻo i luga.

Mo se faʻataʻitaʻiga, seʻi o tatou tilotilo i se faletusi lauiloa i liʻo vaapiapi maseesee mo le gagana Scala polokalame, o lona uiga, o le galuega Tu'ufa'atasiga Tulaga Taua. I se tulaga lautele, ina ia pasi faʻamaufaʻailoga i se fesili SQL, e tatau ona e faʻaogaina le tagata faʻaoga $, lea e suitulaga ai fa'amaumauga i se fesili SQL na fa'atulaga muamua. O lona uiga, o le mea moni, o se faʻataʻitaʻiga tuusaʻo o le Faʻamatalaga Saunia i Java. Ae, afai e te manaʻomia le fausiaina ma le malosi o se fesili SQL, mo se faʻataʻitaʻiga, afai e te manaʻomia le pasi igoa o laulau, e mafai ona e faʻaogaina le tagata faʻaoga. #$, lea o le a suia saʻo ai faʻamatalaga i totonu o le fesili (toetoe lava pei o le faʻaogaina o manoa).

Fa'ata'ita'iga code:

// В общем случае - значения, контролируемые пользователем
val table = "coffees"
sql"select * from #$table where name = $name".as[Coffee].headOption

E leʻi iloa e Checkmarx le faʻaogaina o le Splicing Literal Values ​​​​ma faaseʻe faʻagaioiga #$, o lea seʻi o tatou taumafai e aʻoaʻo atu e faʻamaonia ai tui ole SQL ma faʻamaonia nofoaga saʻo i le code:

// Находим все импорты
CxList imports = All.FindByType(typeof(Import));

// Ищем по имени, есть ли в импортах slick
CxList slick = imports.FindByShortName("slick");

// Некоторый флаг, определяющий, что импорт библиотеки в коде присутствует
// Для более точного определения - можно применить подход с именем файла
bool not_empty_list = false;
foreach (CxList r in slick)
{
    // Если встретили импорт, считаем, что slick используется
	not_empty_list = true;
}

if (not_empty_list) {
    // Ищем вызовы, в которые передается SQL-строка
	CxList sql = All.FindByShortName("sql");
	sql.Add(All.FindByShortName("sqlu"));
	
	// Определяем данные, которые попадают в эти вызовы
	CxList data_sql = All.DataInfluencingOn(sql);
	
	// Так как синтакис не поддерживается, можно применить подход с регулярными выражениями
	// RegExp стоит использовать крайне осторожно и не применять его на большом количестве данных, так как это может сильно повлиять на производительность
	CxList find_possible_inj = data_sql.FindByRegex(@"#$", true, true, true);

    // Избавляемся от лишних срабатываний, если они есть и выводим в результат
	result = find_possible_inj.FindByType(typeof(BinaryExpr));
}

O se galuega: Su'e mo galuega fa'aoga vaivai ile faletusi Open-Source

vaifofo: E tele kamupani latou te fa'aogaina meafaigaluega e mata'ituina ai le Open-Source (OSA practice) e iloa ai le fa'aogaina o fa'aoga vaivai o faletusi i totonu o talosaga ua atia'e. O nisi taimi e le mafai ona fa'afouina sea faletusi i se fa'amaumauga malupuipuia. I nisi tulaga o loʻo i ai tapulaʻa faʻatinoga, i isi e leai se faʻaoga saogalemu. I lenei tulaga, o le tuʻufaʻatasia o faiga SAST ma le OSA o le a fesoasoani e faʻamautinoa ai o galuega e taʻitaʻia ai le faʻaogaina o le faʻafitauli e le o faʻaaogaina i le code.

Ae o nisi taimi, aemaise lava pe a mafaufau i le JavaScript, atonu e le o se galuega e matua leai se aoga. Lalo o se fofo, masalo e le lelei, ae ui i lea o loʻo galue, faʻaaoga le faʻataʻitaʻiga o faʻafitauli i le vaega. lodash i metotia template и *set.

Fa'ata'ita'iga o fa'ata'ita'iga fa'ailoga fa'aletonu i se faila JS:

/**
 * Template example
 */

'use strict';
var _ = require("./node_modules/lodash.js");


// Use the "interpolate" delimiter to create a compiled template.
var compiled = _.template('hello <%= js %>!');
console.log(compiled({ 'js': 'lodash' }));
// => 'hello lodash!'

// Use the internal `print` function in "evaluate" delimiters.

var compiled = _.template('<% print("hello " + js); %>!');
console.log(compiled({ 'js': 'lodash' }));
// => 'hello lodash!'

Ma pe a faʻafesoʻotaʻi saʻo i le html:

<!DOCTYPE html>
<html>
<head>
    <title>Lodash Tutorial</title>
    <script src="./node_modules/lodash.js"></script>
    <script type="text/javascript">
  // Lodash chunking array
        nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];

        let c1 = _.template('<% print("hello " + js); %>!');
        console.log(c1);

        let c2 = _.template('<% print("hello " + js); %>!');
        console.log(c2);
    </script>
</head>
<body></body>
</html>

O loʻo matou vaʻavaʻai mo a matou auala vaivai uma, o loʻo lisiina i faʻafitauli:

// Ищем все строки: в которых встречается строка lodash (предполагаем, что это объявление импорта библиотеки
CxList lodash_strings = Find_String_Literal().FindByShortName("*lodash*");

// Ищем все данные: которые взаимодействуют с этими строками
CxList data_on_lodash = All.InfluencedBy(lodash_strings);


// Задаем список уязвимых методов
List<string> vulnerable_methods = new List<string> {"template", "*set"};

// Ищем все наши уязвимые методы, которые перечисленны в уязвимостях и отфильтровываем их только там, где они вызывались
CxList vulnerableMethods = All.FindByShortNames(vulnerable_methods).FindByType(typeof(MethodInvokeExpr));

//Находим все данные: которые взаимодействуют с данными методами
CxList vulnFlow = All.InfluencedBy(vulnerableMethods);

// Если есть пересечение по этим данным - кладем в результат
result = vulnFlow * data_on_lodash;

// Формируем список путей по которым мы уже прошли, чтобы фильтровать в дальнейшем дубли
List<string> lodash_result_path = new List<string> {};

foreach(CxList lodash_result in result)
{
    // Очередной раз получаем пути к файлам
	string file_name = lodash_result.GetFirstGraph().LinePragma.FileName;
	lodash_result_path.Add(file_name);
}

// Дальше идет часть относящаяся к html файлам, так как в них мы не можем проследить откуда именно идет вызов
// Формируем массив путей файлов, чтобы быть уверенными, что срабатывания уязвимых методов были именно в тех файлах, в которых объявлен lodash
List<string> lodash_path = new List<string> {};
foreach(CxList string_lodash in lodash_strings)
{
	string file_name = string_lodash.GetFirstGraph().LinePragma.FileName;
	lodash_path.Add(file_name);
}

// Перебираем все уязвимые методы и убеждаемся, что они вызваны в тех же файлах, что и объявление/включение lodash
foreach(CxList method in vulnerableMethods)
{
	string file_name_method = method.GetFirstGraph().LinePragma.FileName;
	if (lodash_path.Contains(file_name_method) == true && lodash_result_path.Contains(file_name_method) == false){
		result.Add(method);
	}
}

// Убираем все UknownReferences и оставляем самый "длинный" из путей, если такие встречаются
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceSmallFlow) - result.FindByType(typeof(UnknownReference));

O se galuega: Su'e tusi faamaonia o lo'o fa'apipi'i ile talosaga

vaifofo: E le o se mea e le masani ai mo talosaga, aemaise lava telefoni feaveaʻi, e faʻaaoga tusi faamaonia poʻo ki e faʻaoga ai sapalai eseese pe faʻamaonia SSL-Pinning. Mai se vaaiga saogalemu, o le teuina o ia mea i tulafono laiti e le o se faiga sili ona lelei. Sei o tatou taumafai e tusi se tulafono e suʻe ai faila tutusa i totonu o le fale teu oloa:

// Найдем все сертификаты по маске файла
CxList find_certs = All.FindByShortNames(new List<string> {"*.der", "*.cer", "*.pem", "*.key"}, false);

// Проверим, где в приложении они используются
CxList data_used_certs = All.DataInfluencedBy(find_certs);

// И для мобильных приложений - можем поискать методы, где вызывается чтение сертификатов
// Для других платформ и приложений могут быть различные методы
CxList methods = All.FindByMemberAccess("*.getAssets");

// Пересечение множеств даст нам результат по использованию локальных сертификатов в приложении
result = methods * data_used_certs;

O se galuega: Su'e fa'ailoga fa'aletonu ile talosaga

vaifofo: E masani ona manaʻomia le soloia o faʻailoga fetuutuunai poʻo isi faʻamatalaga taua o loʻo i ai i le code. O le mea moni, o le teuina i totonu o le source code e le o se manatu lelei, ae o tulaga e eseese. Faʻafetai i fesili CxQL, o le sailia o mea faʻapenei e faigofie lava:

// Получаем все строки, которые содержатся в коде
CxList strings = base.Find_Strings();

// Ищем среди всех строк нужное нам значение. В примере токен в виде строки "qwerty12345"
result = strings.FindByShortName("qwerty12345");

iʻuga

Ou te faʻamoemoe o lenei tusiga o le a aoga ia i latou o loʻo amata la latou masani i le meafaigaluega Checkmarx. Masalo oi latou ua leva ona tusia a latou lava tulafono mo se taimi umi o le a maua foi se mea aoga i lenei taʻiala.

Ae paga lea, o loʻo i ai nei le leai o se punaoa e mafai ona aoina mai ai manatu fou i le taimi o le atinaʻeina o tulafono mo Checkmarx. O le mea lena na matou faia ai fale teu oloa ile Github, lea o le a matou faʻasalalau ai a matou galuega ina ia mafai e tagata uma e faʻaaogaina le CxQL ona maua se mea aoga i totonu, ma maua ai foi le avanoa e faʻasoa ai a latou galuega i le alalafaga. O lo'o fa'agasolo le fa'atumuina ma le fa'atulagaina o anotusi, o lea e talia ai tagata fai sao!

Faafetai mo lau gauai!

puna: www.habr.com

Faaopoopo i ai se faamatalaga