Me pehea te tuhi ture mo Checkmarx me te kore e porangi

Hei Habr!

I a maatau mahi, he maha nga wa e pa ana a taatau kamupene ki nga momo taputapu tātari waehere pateko (SAST). I waho o te pouaka ka mahi ratou katoa. Ko te tikanga, ka whakawhirinaki katoa ki te kaupapa me nga hangarau e whakamahia ana i roto, me te pai o enei hangarau e hipokina ana e nga ture o te tātari. Ki taku whakaaro, ko tetahi o nga tino paearu i te wa e whiriwhiri ana i te taputapu SAST ko te kaha ki te whakarite kia rite ki nga ahuatanga o o tono, ara, te tuhi me te whakarereke i nga ture tātari, i te mea e kiia ana ko nga Uiui Ritenga.

Me pehea te tuhi ture mo Checkmarx me te kore e porangi

Ka whakamahia e matou a Checkmarx - he kaitirotiro waehere tino pai me te kaha. I roto i tenei tuhinga ka korero ahau mo taku wheako ki te tuhi i nga ture tātari mo taua mea.

Ripanga o nga ihirangi

urunga

Hei timata, e hiahia ana ahau ki te taunaki i tetahi o nga tuhinga iti i roto i te reo Ruhia mo nga ahuatanga o te tuhi patai mo Checkmarx. I whakaputaina i runga i te Habré i te mutunga o 2019 i raro i te taitara: "Kia ora, Checkmarx!" Me pehea te tuhi patai Checkmarx SAST me te kimi whakaraeraetanga hauhautanga.

Ka āta tirotirohia me pehea te tuhi i nga patai tuatahi ki te CxQL (Checkmarx Query Language) mo etahi tono whakamatautau me te whakaatu i nga maapono taketake mo te mahi ture tātari.

E kore ahau e whakahoki ano i nga korero i whakaahuatia i roto, ahakoa ka noho tonu etahi waahi. I roto i taku tuhinga ka ngana ahau ki te whakahiato i tetahi momo "kohinga tohutoro", he rarangi o nga otinga mo nga raruraru motuhake i tutaki ahau i taku mahi me Checkmarx. Me whakamau taku roro mo te maha o enei raru. I etahi wa kaore i te nui nga korero i roto i nga tuhinga, i etahi wa he uaua ki te mohio me pehea te mahi i nga mea e hiahiatia ana. Te ti'aturi nei au e kore taku wheako me nga po moe kore e horihori, a ko tenei "kohinga o nga tohutoro Uiui Ritenga" ka ora koe i etahi haora, i etahi rua ranei o nga pūtau nerve. Na, kia timata tatou!

Nga korero whanui mo nga ture

Tuatahi, ka titiro tatou ki etahi ariā taketake me te mahi ki nga ture, kia pai ake te mohio ki nga mea ka puta. A, no te mea kaore nga tuhinga e korero mo tenei, kua tino horahia ranei i roto i te hanganga, kaore i te tino watea.

  1. Ka whakamahia nga ture i te wa e matawai ana i runga i te tatūkē i tohua i te tiimatanga (he huinga ture hohe). Ka taea e koe te hanga i te maha o nga tatūkē, me pehea te hanga i aua mea ka whakawhirinaki ki nga waahanga o to mahi. Ka taea e koe te whakarōpū ma te reo, te kowhiri ranei i nga tatūkē mo ia kaupapa. Ko te maha o nga ture kaha ka pa ki te tere me te tika o te matawai.

    Me pehea te tuhi ture mo Checkmarx me te kore e porangiTe whakatu tatūkē ki te atanga Checkmarx

  2. Ka whakatikahia nga ture ki tetahi taputapu motuhake ko CxAuditor. He tono papamahi tenei e hono ana ki tetahi tūmau e whakahaere ana i a Checkmarx. E rua nga momo mahi o tenei taputapu: te whakatika ture me te tātari i nga hua o te karapa kua mahia.

    Me pehea te tuhi ture mo Checkmarx me te kore e porangiAtanga CxAudit

  3. Ka wehewehea nga ture i roto i te Checkmarx ma te reo, ara, kei ia reo ona ake huinga patai. Arā ano etahi ture whanui e pa ana ahakoa he aha te reo, koinei nga mea e kiia nei ko nga patai matua. Ko te nuinga, ko nga patai matua ko te rapu korero e whakamahia ana e etahi atu ture.

    Me pehea te tuhi ture mo Checkmarx me te kore e porangiTe wehewehe i nga ture ma te reo

  4. Ko nga Ture "Ka taea te whakahaere" me te "Kaore e taea te whakahaere" (Ka mahia me te kore e mahia). Ehara i te tika te ingoa, ki taku whakaaro, engari koira tena. Ko te rarangi o raro ko te hua o te whakahaere i nga ture "Ka taea" ka whakaatuhia ki nga hua matawai i roto i te UI, a ko nga ture "Kare-Whakamahia" e hiahiatia ana hei whakamahi i o raatau hua ki etahi atu tono (mehemea, he mahi noa. ).

    Me pehea te tuhi ture mo Checkmarx me te kore e porangiTe whakatau i te momo ture i te wa e hanga ana

  5. Ka taea e koe te hanga ture hou, te taapiri/tuhi ano i nga ture o mua. Hei tuhi ano i tetahi ture, me rapu e koe i roto i te rakau, pawhiri-matau ka kowhiria "Tukuhia" mai i te tahua taka-iho. He mea nui kia maumahara i konei ko nga ture hou kaore i te whakauru i te tuatahi ki roto i nga tatūkē me te kore e kaha. Hei timata ki te whakamahi i a raatau me whakahohe koe i roto i te tahua "Kaiwhakahaere Tatūkē" i roto i te taputapu. Ko nga ture tuhi ano ka pupuri i o raatau tautuhinga, ara, ki te kaha te ture, ka noho pera, ka tukuna tonu.

    Me pehea te tuhi ture mo Checkmarx me te kore e porangiHe tauira o te ture hou i roto i te atanga Kaiwhakahaere Tatūkē

  6. I te wa e mahia ana, ka hangaia he "rakau" o nga tono, ka whakawhirinaki ki te aha. Ko nga ture kohikohi korero ka mahia i te tuatahi, ko te hunga ka whakamahi tuarua. Kei te keteroki te hua o te mahi, na mena ka taea te whakamahi i nga hua o te ture o naianei, he pai ake te mahi, ka iti ake te wa karapa.

  7. Ka taea te whakamahi ture ki nga taumata rereke:

  • Mo te katoa o te punaha - ka whakamahia mo tetahi matawai o tetahi kaupapa

  • I te taumata kapa - ka whakamahia anake ki te matawai i nga kaupapa i roto i te roopu kua tohua.

  • I te taumata kaupapa - Ka whakamahia i roto i tetahi kaupapa motuhake

    Me pehea te tuhi ture mo Checkmarx me te kore e porangiTe whakatau i te taumata e whakamahia ai te ture

“Papakupu” mo te hunga timata

A ka timata ahau ki etahi mea i puta mai ai nga patai, ka whakaatu ano hoki ahau i nga tikanga maha ka tino ngawari te ora.

Nga mahi me nga rarangi

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

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

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

Katoa nga mea i kitea

I roto i te reo karapahia, ka taea e koe te tiki rarangi o nga mea tino katoa kua tohua e Checkmarx (nga aho, nga mahi, nga karaehe, nga tikanga, me etahi atu). Koinei etahi waahi o nga taonga ka taea te uru atu All. Arā, ki te rapu i tetahi mea whai ingoa motuhake searchMe, ka taea e koe te rapu, hei tauira, ma te ingoa puta noa i nga mea katoa i kitea:

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

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

Engari, ki te hiahia koe ki te rapu i tetahi atu reo mo etahi take kaore i whakauruhia ki te karapa (hei tauira, groovy i roto i te kaupapa Android), ka taea e koe te whakawhānui ake i to waahi ahanoa ma te taurangi:

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

Nga Mahi mo te tātari Rere

Ka whakamahia enei mahi i roto i te maha o nga ture, a he iti nei te pepa tinihanga o te tikanga:

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

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

Te tiki ingoa kōnae/ara

He maha nga huanga ka taea te tiki mai i nga hua o te patai (te ingoa o te konae i kitea ai te urunga, aho, aha atu), engari kaore nga tuhinga e kii me pehea te tiki me te whakamahi. Na, ki te mahi i tenei, me uru koe ki te taonga LinePragma me nga taonga e hiahiatia ana ka noho ki roto:

// Для примера найдем все методы
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);

He mea tika kia maumahara ki tena FileName kei roto tonu te ara ki te konae, na te mea i whakamahia e matou te tikanga GetFirstGraph.

Te hua o te mahi

He taurangi motuhake kei roto CxQL result, e whakahoki ana i te hua o te whakatinana i to ture tuhi. Ka arawhiti tonu ka taea e koe te tuhi i nga hua takawaenga ki roto, ka huri me te whakamahine i a koe e mahi ana. Engari, ki te kore he taumahi ki tenei taurangi, mahi ranei i roto i te ture return— ka kore te hua o te mahi.

Ko te patai e whai ake nei e kore e whakahoki mai i tetahi mea ki a matou na runga i te mahi, ka noho putua tonu:

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

Engari, ka tohua te hua o te mahi ki te hua taurangi makutu, ka kite tatou he aha te hokinga mai o tenei piiraa ki a tatou:

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

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

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

Te whakamahi i nga hua o etahi atu ture

Ko nga ture i roto i te Checkmarx ka taea te kii he rite ki nga mahi i roto i te reo hotaka auau. I te tuhi ture, ka taea e koe te whakamahi i nga hua o etahi atu patai. Hei tauira, kaore he take ki te rapu i nga waea tikanga katoa i roto i te waehere i nga wa katoa, waea noa ki te ture e hiahiatia ana:

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

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

Ma tenei huarahi ka taea e koe te whakapoto i te waehere me te tino whakaiti i te wa mahi ture.

Te whakaoti rapanga

Te takiuru

I te wa e mahi ana me te taputapu, i etahi wa kaore e taea te tuhi tonu i te patai e hiahiatia ana, me whakamatau koe, me te whakamatau i nga whiringa rereke. Mo tenei keehi, ka tukuna e te taputapu te takiuru, e kiia ana ko enei e whai ake nei:

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

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

Engari he mea tika kia mahara ko tenei tikanga ka whakaae noa hei whakauru aho, no reira kaore e taea te whakaatu i te rarangi katoa o nga huānga kua kitea hei hua o te mahi tuatahi. Ko te whiringa tuarua, e whakamahia ana mo te patuiro, ko te tautapa ki tetahi taurangi makutu mai i ia wa result te hua o te patai me te kite he aha te mahi. Ko tenei huarahi kaore i te tino watea; me tino mohio koe kaore he whakakorenga, he mahi ranei me tenei i roto i te waehere i muri mai. result korero noa ranei te waehere i raro nei. Ka taea ranei e koe, penei i ahau, ka wareware ki te tango i etahi momo waea mai i tetahi ture kua oti te hanga me te miharo he aha te mea kaore he mahi.

Ko te huarahi pai ake ko te karanga i te tikanga return me te tawhā e hiahiatia ana. I tenei keehi, ka mutu te whakatinanatanga o te ture, ka taea e tatou te kite i nga mea i puta mai i nga mea i tuhia e matou:

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

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

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

raruraru takiuru

He waahi kaore e taea e koe te uru atu ki te taputapu CxAudit (e whakamahia ana hei tuhi ture). He maha nga take mo tenei, tae atu ki nga tukinga, nga whakahoutanga Windows ohorere, BSOD me etahi atu ahuatanga ohorere kei tua atu i a maatau. I tenei take, i etahi wa he waahi kaore ano kia oti i roto i te paataka raraunga, e kore ai koe e uru mai ano. Hei whakatika, me whakahaere e koe etahi patai:

Mo Checkmarx i mua i te 8.6:

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

Mo Checkmarx i muri i te 8.6:

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

Ture tuhi

Inaianei ka tae ki te waahanga tino pai. Ka timata koe ki te tuhi ture i roto i te CxQL, ko nga mea e hapa ana koe ehara i te nui o nga tuhinga engari ko etahi tauira ora mo te whakaoti rapanga me te whakaahua i te tikanga o te mahi uiui.

Ka ngana ahau ki te whakangawari ake i te oranga mo te hunga e timata ana ki te ruku ki te reo patai me te tuku tauira maha mo te whakamahi Uiui Ritenga hei whakaoti rapanga. Ko etahi o enei he tino whanui ka taea te whakamahi i roto i to kamupene kaore he huringa, ko etahi atu he mea motuhake, engari ka taea hoki te whakamahi ma te whakarereke i te waehere kia rite ki nga korero mo o tono.

Na, koinei nga raruraru i tino pa ki a matou:

He mahi: He maha nga Rere i roto i nga hua o te whakahaere i te ture, a ko tetahi he kohanga o tetahi, me waiho e koe tetahi.

otinga: Inaa, i etahi wa ka whakaatu a Checkmarx i nga rerenga raraunga ka īnaki pea, he momo poto o etahi atu. He tikanga motuhake mo enei keehi ReduceFlow. I runga i te tawhā, ka tohua te Rere poto rawa atu ranei:

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

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

He mahi: Roha te rarangi o nga raraunga tairongo e tauhohe ai te taputapu

otinga: He ture taketake a Checkmarx, ko nga hua e whakamahia ana e te maha atu o nga patai. Ma te taapiri i etahi o enei ture me nga raraunga e pa ana ki to tono, ka taea e koe te whakapai tonu i o hua karapa. Kei raro nei he tauira ture hei timata koe:

General_privacy_violation_list

Me taapiri etahi taurangi ka whakamahia i roto i ta maatau tono ki te penapena i nga korero tairongo:

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

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

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

He mahi: Roha te rarangi o nga taurangi me nga kupuhipa

otinga: Ka tūtohu ahau kia aro tonu koe ki te ture taketake mo te tautuhi i nga kupuhipa i roto i te waehere me te taapiri atu ki tetahi rarangi ingoa rereke e whakamahia ana i roto i to kamupene.

Kupuhipa_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);
	}
}

He mahi: Tāpirihia nga anga kua whakamahia kaore i te tautokohia e Checkmarx

otinga: Ko nga patai katoa i roto i te Checkmarx kua wehewehea e te reo, no reira me taapiri ture mo ia reo. Kei raro nei etahi tauira o aua ture.

Mena ka whakamahia nga whare pukapuka hei whakakii, hei whakakapi ranei i nga taumahinga paerewa, ka ngawari te taapiri atu ki te ture taketake. Na ka ako tonu nga tangata katoa e whakamahi ana i nga kupu whakataki hou. Hei tauira, ko nga whare pukapuka mo te takiuru ki te Android ko Timber me Loggi. I roto i te kete taketake, karekau he ture mo te tautuhi i nga waea kore-punaha, na mena ka uru mai he kupuhipa, he kaitautuhi waahi ranei ki roto i te raarangi, kaore matou e mohio mo tena. Me ngana ki te taapiri i nga whakamaramatanga o aua tikanga ki nga ture Checkmarx.

He tauira waehere whakamatautau e whakamahi ana i te whare pukapuka Timber mo te takiuru:

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");
    }
}

Anei tetahi tauira o te tono mo Checkmarx, ka taea e koe te taapiri i te whakamaramatanga mo te karanga i nga tikanga Timber hei waahi putanga mo nga raraunga mai i te tono:

Kimihia ngaPutanga Android

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

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

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

Ka taea hoki e koe te taapiri atu ki te ture tata, engari e pa ana tenei ki te takiuru ki te Android:

Kimihia nga AndroidLog_Outputs

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

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

Ano, ki te whakamahi nga tono Android Kaiwhakahaere Mahi mo nga mahi tukutahi, he pai ki te whakamohio atu ki a Checkmarx mo tenei ma te taapiri tikanga mo te tiki raraunga mai i te mahi getInputData:

FindAndroidRead

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

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

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

He mahi: Te rapu i nga raraunga tairongo i roto i te plist mo nga kaupapa iOS

otinga: He maha nga wa ka whakamahi a iOS i nga konae motuhake me te toronga .plist hei penapena i nga momo taurangi me nga uara. Ko te pupuri i nga kupuhipa, tohu, kii me etahi atu raraunga tairongo i roto i enei konae kaore i te tūtohu, na te mea ka taea te tango mai i te taputapu kaore he raru.

Ko nga konae Plist he ahuatanga kaore e kitea e te kanohi tahanga, engari he mea nui ki a Checkmarx. Me tuhi he ture e rapu ai i nga raraunga e hiahiatia ana me te korero mai ki a maatau mehemea kei te whakahuahia nga kupuhipa, tohu tohu ranei ki tetahi waahi.

He tauira o taua konae, kei roto he tohu mo te whakawhitiwhiti korero me te ratonga tuara:

<?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>

Me tetahi ture mo Checkmarx, he maha nga ahuatanga e tika ana kia whai whakaaro ki te tuhi:

// Используем результат выполнения правила по поиску файлов 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);

He mahi: Te rapu korero i roto i te XML

otinga: He tino watea nga mahi a Checkmarx mo te mahi me te XML me te rapu uara, tohu, huanga me etahi atu. Engari, ko te kino, he hapa i roto i nga tuhinga na te mea kaore he tauira kotahi e mahi. Ahakoa te mea kua whakakorehia tenei hapa i roto i te putanga hou o te tuhinga, kia tupato ki te whakamahi koe i nga putanga o mua o nga tuhinga.

Anei he tauira hē mai i te tuhinga:

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

Ka rite ki te hua o te nganatanga mahi, ka whiwhi tatou i te hapa e All kaore he tikanga pera... A he pono tenei, na te mea he waahi motuhake, he waahi ahanoa motuhake mo te whakamahi i nga mahi mo te mahi me te XML - cxXPath. Koinei te ahua o te patai tika ki te kimi i tetahi tautuhinga i roto i te Android ka taea te whakamahi i te hokohoko HTTP:

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

Me titiro ki roto i nga korero iti ake, na te mea he rite te wetereo mo nga mahi katoa, i muri i to whakatau i tetahi, katahi ka hiahia koe ki te kowhiri i te mea e hiahia ana koe. Na, kia rite ki nga tawhā:

  • "*.xml"— kanohi o nga konae hei rapu

  • 8 — id o te reo e whakamahia ai te ture

  • "cleartextTrafficPermitted"— ingoa huanga kei xml

  • "true" — te uara o tenei huanga

  • false — te whakamahi i nga korero i te wa e rapu ana

  • true — ko te tikanga ka mahia te rapu me te kore e aro ki te keehi, ara, te take-kore

Hei tauira, i whakamahia e matou he ture e tohu ana i te he, mai i te tirohanga haumarutanga, nga tautuhinga hononga whatunga i roto i te Android e taea ai te whakawhitiwhiti korero me te tūmau ma te kawa HTTP. He tauira o te tautuhinga kei roto he huanga cleartextTrafficPermitted me te tikanga 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>

He mahi: Whakawhāitihia ngā hua mā te ingoa kōnae/ara

otinga: I roto i tetahi o nga kaupapa nui e pa ana ki te whanaketanga o te tono pūkoro mo te Android, i tutaki matou ki nga hua teka o te ture e whakatau ana i te whakatakotoranga obfuscation. Ko te meka ko te ture i waho o te pouaka e rapu ana i te konae build.gradle he tautuhinga kawenga mo te tono ture whakapouri mo te putanga tuku o te tono.

Engari i roto i nga kaupapa nui i etahi wa he konae tamariki build.gradle, e tohu ana ki nga whare pukapuka kei roto i te kaupapa. Ko te mea rereke ko te mea ahakoa kaore enei konae e tohu i te hiahia mo te whakamaarama, ka whakamahia nga tautuhinga o te konae huihuinga matua i te wa e whakahiato ana.

No reira, ko te mahi he tapahi i nga keu i roto i nga konae tamariki no nga whare pukapuka. Ka taea te tautuhi ma te aroaro o te raina apply 'com.android.library'.

He tauira waehere mai i te konae build.gradle, e whakatau ana i te hiahia mo te whakapouri:

apply plugin: 'com.android.application'

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

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

dependencies {
  ...
}

tauira kōnae build.gradle mo te whare pukapuka kei roto i te kaupapa karekau tenei tautuhinga:

apply plugin: 'android-library'

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

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

Me te ture 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);
		}
	}
}

Ka taea e tenei huarahi te ao me te whai hua ehara i te mea mo nga tono Android anake, engari mo etahi atu keehi ka hiahia koe ki te whakatau mehemea no tetahi konae tetahi hua.

He mahi: Tāpirihia he tautoko mo te whare pukapuka tuatoru mena kaore i te tino tautokohia te wetereo

otinga: Ko te maha o nga momo anga e whakamahia ana i roto i te mahi tuhi waehere kei waho noa i nga tūtohi. Ko te tikanga, kaore a Checkmarx e mohio tonu mo to ratau oranga, a ko ta tatou mahi he ako ki te mohio ko etahi tikanga kei roto i tenei anga. I etahi wa ka uaua tenei na te mea ka whakamahia e nga anga nga ingoa mahi he tino noa, kaore e taea te whakatau i te hononga o tetahi waea ki tetahi whare pukapuka motuhake.

Ko te uaua ko te wetereo o aua whare pukapuka kaore i te mohio tika i nga wa katoa, me whakamatau koe ki te karo i te maha o nga hua pai teka. He maha nga whiringa hei whakapai ake i te tika o te matawai me te whakaoti rapanga:

  • Ko te whiringa tuatahi, ka tino mohio matou kei te whakamahia te whare pukapuka ki tetahi kaupapa motuhake ka taea te whakamahi i te ture ki te taumata o te roopu. Engari ki te whakatau te roopu ki te whai huarahi rereke, ki te whakamahi ranei i etahi whare pukapuka e inaki ana nga ingoa mahi, ka taea e taatau te tiki pikitia kaore i te tino pai mo te maha o nga hua pai.

  • Ko te waahanga tuarua ko te rapu i nga konae kei te kawemai te whare pukapuka. Ma tenei huarahi, ka tino mohio kei te whakamahia tika te whare pukapuka e hiahiatia ana i roto i tenei konae.

  • A ko te tuatoru ko te whakamahi i nga huarahi e rua i runga ake nei.

Hei tauira, me titiro ki tetahi whare pukapuka rongonui i roto i nga porowhita whaiti puhoi mo te reo papatono Scala, ara, te mahi Te Whakakotahi i nga Uara Kupu. I te nuinga o te waa, ki te tuku i nga tawhā ki te uiui SQL, me whakamahi koe i te kaiwhakahaere $, e whakakapi ana i nga raraunga ki roto i te patai SQL i hangaia i mua. Arā, ko te tikanga, he rite tonu te korero o te Tauākī Whakaritea i Java. Engari, ki te hiahia koe ki te hanga hihiri i tetahi patai SQL, hei tauira, ki te hiahia koe ki te tuku ingoa ripanga, ka taea e koe te whakamahi i te kaiwhakahaere. #$, ka whakakapi tika i nga raraunga ki roto i te patai (tata ki te whakakotahi aho).

Waehere tauira:

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

Kare ano a Checkmarx e mohio me pehea te kite i te whakamahi i te Splicing Literal Values ​​me te peke i nga kaiwhakahaere #$, no reira me ngana ki te ako ki te tautuhi i nga werohanga SQL pea me te tohu i nga waahi tika i roto i te waehere:

// Находим все импорты
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));
}

He mahi: Rapua nga mahi whakaraerae kua whakamahia i roto i nga whare pukapuka Open-Source

otinga: He maha nga kamupene e whakamahi ana i nga taputapu aroturuki Open-Source (OSA practice) ki te kite i te whakamahinga o nga putanga whakaraerae o nga whare pukapuka i roto i nga tono kua whakawhanakehia. I etahi wa kaore e taea te whakahou i taua whare pukapuka ki tetahi putanga haumaru. I etahi wa he herenga mahi, i etahi atu kaore he putanga haumaru. I tenei keehi, ko te huinga o nga mahi SAST me OSA ka awhina ki te whakatau ko nga mahi e arahi ana ki te whakamahi i te whakaraeraetanga kaore i te whakamahia i roto i te waehere.

Engari i etahi wa, ina koa ka whakaaro koe ki te JavaScript, ehara pea tenei i te mahi iti rawa. Kei raro nei he otinga, kaore pea i te pai, engari ka mahi tonu, ma te whakamahi i te tauira o nga whakaraeraetanga o te waahanga lodash i roto i nga tikanga template и *set.

Ko nga tauira o te whakamatautau waehere whakaraerae pea i roto i te konae 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!'

A, no te hono tika ki te 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>

Kei te rapu matou mo o matou tikanga whakaraerae katoa, kua whakararangitia i roto i nga whakaraeraetanga:

// Ищем все строки: в которых встречается строка 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));

He mahi: Te rapu i nga tiwhikete kua mau ki roto i te tono

otinga: Ehara i te mea noa mo nga tono, ina koa nga waea pūkoro, ki te whakamahi i nga tiwhikete, ki nga taviri ranei ki te uru atu ki nga momo tūmau, ki te manatoko ranei i te SSL-Pinning. Mai i te tirohanga haumarutanga, ko te penapena i enei mea ki roto i te waehere ehara i te mahi pai. Me ngana ki te tuhi i tetahi ture e rapu ana i nga konae rite ki te putunga:

// Найдем все сертификаты по маске файла
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;

He mahi: Te kimi tohu taupatupatu i roto i te tono

otinga: He maha nga wa e tika ana kia whakakorehia nga tohu kua taupatupatuhia, etahi atu korero nui ranei kei roto i te waehere. Ko te tikanga, ko te penapena i roto i te waehere puna ehara i te mea pai, engari he rereke nga ahuatanga. He mihi ki nga patai CxQL, he tino ngawari te rapu mea penei:

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

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

mutunga

Kei te tumanako ahau ka whai hua tenei tuhinga ki te hunga e timata ana ki te mohio ki te taputapu Checkmarx. Tena pea ko te hunga kua roa e tuhi ana i o raatau ture mo te wa roa ka kitea ano he mea whai hua i roto i tenei aratohu.

Heoi ano, i tenei wa karekau he rauemi e kohia ai nga whakaaro hou i te wa e hangaia ana nga ture mo Checkmarx. Koia matou i hanga ai putunga i runga i Github, ki reira ka whakairihia a maatau mahi kia kitea e nga tangata katoa e whakamahi ana i te CxQL tetahi mea whai hua ki roto, me te whai waahi hoki ki te whakapuaki i a raatau mahi ki te hapori. Kei te mahi te putunga ki te whakaki me te hanga i nga ihirangi, na reira, nau mai nga kaikohaoha!

Mauruuru koe mo to aro!

Source: will.com

Tāpiri i te kōrero