Kurallar

GiTRay reponun her dosyasında 35 kural çalıştırır. Bir kural, en güçlü bulgusuyla puana bir kez ağırlığını ekler. Toplam en fazla 100'dür: 30 altı temiz, 30 ve üstü şüpheli, 70 ve üstü tehlikeli. Bazı kurallar daha güçlü kanıtta ağırlığını artırır (örneğin bir şey de indiren bir kurulum scripti). Kod kuralları, komutların genellikle örnek olduğu belgelerde ve kaynak kodundaki arama kalıplarında ve yorumlarda daha az ağırlık taşır: bunlar hiç çalışmaz, güvenlik araçları saldırıları böyle tarif eder.

Zararlı bağımlılıklar

GR-DEP-001+70

Bilinen zararlı bir pakete bağımlı

Reponun kendi kodu temiz olabilir ama npm install ya da pip install, güvenlik araştırmacılarının zararlı olduğunu doğruladığı bir paketi indirebilir (OpenSSF malicious-packages verisi, OSV üzerinden). Bağımlılıkları kurmak onu çalıştırır. Sahte iş görüşmesi projeleri ve isim taklidi yapan paketler bilgi çalan yazılımları böyle ulaştırır.

Kendiliğinden çalışanlar

GR-AUTO-001+10

package.json kurulumda bir script çalıştırıyor

npm, yaşam döngüsü scriptlerini (preinstall, postinstall, ...) "npm install" sırasında, siz hiçbir şeyi kullanmadan ya da incelemeden önce kendiliğinden çalıştırır. Zararlı paketler ve repolar bunu geliştiricinin bilgisayarında kod çalıştırmak için kullanır.

dosyalar: package.json

GR-AUTO-002+10

setup.py komut çalıştırıyor ya da ağa bağlanıyor

pip, paket kaynak koddan kurulurken setup.py'yi çalıştırır. Derleyici sürümünü okumak olağandır; ama orada veri indirmek, indirme araçlarını çalıştırmak ya da çözülmüş kodu yürütmek, kurulumda bir zararlı yükün çalışması demektir.

dosyalar: setup.py

GR-AUTO-003+35

VS Code görevi klasör açılınca çalışıyor

"runOn": "folderOpen" ayarlı bir görev, repo VS Code'da açıldığında (çalışma alanına güvenildikten sonra) kendiliğinden başlar. Sahte iş görüşmesi ve "ev ödevi" repoları bunu geliştiricilerin bilgisayarında zararlı yazılım çalıştırmak için kullanır.

dosyalar: .vscode/tasks.json, *.code-workspace

GR-AUTO-004+10

Visual Studio projesi derlemede komut çalıştırıyor

Build olayları ve Exec görevleri, proje Visual Studio'da derlenir derlenmez komut çalıştırır. Güvenlik araştırmacılarını hedef alan saldırılarda, build olayı PowerShell başlatıp arka kapı kuran proje dosyaları dağıtıldı.

dosyalar: *.csproj, *.vbproj, *.fsproj, *.vcxproj, *.vcproj, *.props, *.targets, *.proj

GR-AUTO-005+5

Rust build scripti komut çalıştırıyor ya da indirme yapıyor

Cargo, crate'i derlemeden önce build.rs'yi derleyip çalıştırır; yani "cargo build" sırasında ve açılışta derleme yapan IDE'lerde çalışır. git ya da pkg-config çağırmak normaldir; indirme yapmak ya da PowerShell başlatmak zararlı crate'lerin yük taşıma yoludur.

dosyalar: build.rs

GR-AUTO-006+10

Dev container bilgisayarınızda komut çalıştırıyor

initializeCommand konteynerin içinde değil, sizin bilgisayarınızda çalışır: VS Code'da "Reopen in Container" seçtiğiniz ya da dev container'ı başka bir araçla başlattığınız anda. Orada bir şey indiren ya da çözen komut bir kurulum adımı değil, zararlı yüktür.

dosyalar: .devcontainer/devcontainer.json, .devcontainer.json, .devcontainer/*/devcontainer.json

GR-AUTO-007+30

Editör ayarları repodaki bir programı çalıştırıyor

git.path, php.validate.executablePath ya da bir terminal profili gibi çalışma alanı ayarları VS Code'a hangi programı başlatacağını söyler. Bunlar repodaki bir dosyayı gösteriyorsa VS Code, klasör açılıp güvenilir sayıldığı anda saldırganın programını çalıştırır.

dosyalar: .vscode/settings.json, *.code-workspace

GR-AUTO-008+15

Yapay zekâ kod asistanı kendiliğinden komut çalıştırıyor

Claude Code, Cursor ve Gemini CLI, projenin ayarlarındaki hook komutlarını kendiliğinden (örneğin oturum başlarken) çalıştırır ve projenin tanımladığı MCP sunucularını başlatır. Zehirli bir repoyu yapay zekâ asistanıyla açmak onun komutlarını çalıştırır.

dosyalar: .claude/settings.json, .claude/settings.local.json, .cursor/hooks.json, .gemini/settings.json, .mcp.json, .cursor/mcp.json, .vscode/mcp.json

GR-AUTO-009+35

npm ayarı her scripte kod enjekte ediyor

Projedeki .npmrc, o klasörde çalışan her npm komutuna uygulanır. --require ya da --import içeren node-options, npm'in başlattığı her Node sürecine bir dosya yükler; script-shell ise her scripti çalıştıran kabuğun yerine geçer. Tek bir npm install ya da npm test onu çalıştırır.

dosyalar: .npmrc

GR-AUTO-010+20

direnv dosyası kod indiriyor

direnv, "direnv allow" ile izin verdikten sonra terminalde klasöre her girişinizde .envrc'yi çalıştırır. Değişken tanımlamak normaldir; orada uzaktan bir script indirmek, görmediğiniz kodu her cd'de çalıştırır.

dosyalar: .envrc

Zararlı kod kalıpları

GR-CODE-001+45belgelerde, arama kalıplarında ve yorumlarda +5

Gizlenmiş kodu çözüp çalıştırıyor

Kod çözülüyor (base64, hex, zlib, ...) ve doğrudan bir yorumlayıcıya veriliyor. Meşru projeler çalıştırdıkları şeyi nadiren gizler; zararlı yazılım bunu inceleyenleri ve tarayıcıları atlatmak için yapar.

GR-CODE-002+35belgelerde, arama kalıplarında ve yorumlarda sayılmaz

Bir script indirip doğrudan kabuğa veriyor

Uzaktaki bir script indirilip kaydedilmeden ya da incelenmeden hemen çalıştırılıyor. O adresi kim kontrol ediyorsa bilgisayarınızı da o kontrol eder.

GR-CODE-003+40belgelerde, arama kalıplarında ve yorumlarda +5

Tarayıcının şifre ya da çerez dosyalarını okuyor

Tarayıcıların kayıtlı şifreleri, çerezleri ve bunları çözen anahtarları tuttuğu dosyalara başvuruyor. Bilgi çalan zararlı yazılımlar tam olarak bu dosyaların peşindedir.

GR-CODE-004+25belgelerde, arama kalıplarında ve yorumlarda +3

SSH özel anahtarlarını okuyor

SSH özel anahtarlarına ya da authorized_keys dosyasına başvuruyor. Çalınan özel anahtarlar sunuculara ve GitHub'a erişim sağlar; authorized_keys'e yazmak arka kapı kurar.

GR-CODE-005+35belgelerde, arama kalıplarında ve yorumlarda +5

Kripto cüzdan dosyalarını okuyor

Cüzdan dosyalarına, cüzdan uygulamalarının klasörlerine ya da cüzdan tarayıcı eklentilerine başvuruyor. Kripto çalan zararlı yazılımlar tam olarak bunları arar.

GR-CODE-006+25belgelerde, arama kalıplarında ve yorumlarda +5

Discord webhook'una ya da Telegram botuna veri gönderiyor

Koda gömülü bir Discord webhook'u ya da Telegram bot token'ı, bilgi çalan zararlı yazılımların çalınan şifre, çerez ve dosyaları saldırgana göndermesinin en yaygın yoludur: sunucu bile gerekmez.

GR-CODE-007+35belgelerde, arama kalıplarında ve yorumlarda +5

Windows araçlarıyla indiriyor, saklanıyor ya da kalıcı oluyor

Windows'un kendi programları (certutil, bitsadmin, mshta, rundll32, regsvr32) zararlı yük indirip çalıştırabilir; Defender istisnaları, gizli PowerShell pencereleri ve Run anahtarları da zararlı yazılımın saklanma ve yeniden başlatmadan sağ çıkma yoludur. Normal projelerin bunlara neredeyse hiç ihtiyacı olmaz.

GR-CODE-008+10belgelerde, arama kalıplarında ve yorumlarda +3

Bir dosyanın içeriğini çalıştırıyor

Kod başka bir dosyayı okuyup çalıştırıyor. Sürüm dosyasını böyle okumak eski bir Python alışkanlığıdır; ama Markdown, metin ya da resim dosyası çalıştırmak, asıl yükün inceleyenlerin ve tarayıcıların zararsız veri saydığı bir yere saklandığı anlamına gelir.

Saklı ya da gizlenmiş içerik

GR-OBF-001+15

Uzun, rastgele görünen metin (saklı yük olabilir)

Rastgele görünen uzun metinler, çalışırken çözülen kodlanmış ya da şifrelenmiş yüklerin tipik görüntüsüdür. Zararsız veri de olabilirler (anahtarlar, fontlar, test verileri), bu yüzden tek başına zayıf bir işarettir.

GR-OBF-002+15

Kodda görünmez yön değiştirme karakterleri

Unicode yön değiştirme karakterleri kodun, derleyicinin okuduğundan farklı bir sırada görünmesini sağlar ("Trojan Source", CVE-2021-42574): inceleyen kişi bir yorum görürken yorumlayıcı bir komut çalıştırır. Sağdan sola yazı düz metinde sorun değildir, kodun içinde asla.

GR-OBF-003+40

Satırın çok sağına saklanmış kod

Yüzlerce boşluk kodu ekranın dışına iter; GitHub ve editörler masum görünen bir satır gösterirken saklı kısım çalışır. Sahte GitHub projeleri, yükleyicileri çalışan kodun içine böyle kaçırır.

GR-OBF-004+40

Veri ya da kod saklayan görünmez Unicode karakterler

Uzun varyasyon seçici, etiket ya da sıfır genişlikli karakter dizileri hiçbir şey göstermez ama koca bir programı taşıyabilir; son tedarik zinciri solucanları yükleyicilerini böyle sakladı. Boş görünen Hangul dolgu karakterleri de görünmez değişken adı olarak kullanılabilir.

Sosyal mühendislik

GR-SOC-001+25

Antivirüsünüzü kapatmanızı istiyor

Kullanıcılara Windows Defender'ı kapatmalarını, istisna eklemelerini ya da bir "yanlış alarmı" görmezden gelmelerini söylemek sahte hile, crack ve araç repolarının imzasıdır: yoksa indirilen dosya engellenirdi.

dosyalar: *.md, *.markdown, *.mdown, *.rst, *.adoc, *.asciidoc, *.txt, README*

İkili dosyalar

GR-BIN-001+20

Repoya program dosyası eklenmiş

Kaynak kod reposundaki hazır bir program kod gibi incelenemez: GitHub'da gördüğünüz şey çalışan şey değildir. Sahte projeler yükü böyle taşır, çoğu zaman hiçbir şey yapmayan kaynak kodun yanında. Windows kısayol (.lnk) dosyaları da yaygın bir zararlı yazılım başlatıcısıdır.

GR-BIN-002+30

Repoda şifreli arşiv var

Şifreli bir arşivi GitHub, antivirüs ya da bu tarayıcı inceleyemez. Meşru projelerin böyle bir dosya eklemesi için sebep yoktur; zararlı yazılım bunu her tarayıcıdan sıyrılmak için yapar.

GR-BIN-003+70

Antivirüs motorları bir dosyayı yakalıyor (VirusTotal)

VirusTotal dosyaları yaklaşık 70 antivirüs motorundan geçirir. SHA-256 parmak iziyle eşleşen bu dosyayı (hiçbir şey indirilmez ya da çalıştırılmaz) bazıları yakalıyor. Beş ya da daha fazla motor, bilinen zararlı yazılım demektir. Birkaç motorun yakalaması kurulum dosyalarında ve küçük başlatıcılarda sık görülen bir yanlış alarmdır, o yüzden az puan alır.

Repo sinyalleri

GR-REPO-001+10

Sahip hesabı yepyeni

Sahte repolar genellikle birkaç gün önce açılmış ve şikâyet edilince terk edilen hesaplardan yüklenir. Yeni hesap tek başına sorun değildir ama diğer bulgulara ağırlık katar.

GR-REPO-002+5

Repo çok yakın zamanda açılmış

Zararlı yazılım kampanyaları yeni repolar açar (çoğu zaman popüler projelerin kopyaları) ve kimse yakından bakmadan onları öne çıkarır. Yalnızca diğer bulgularla birlikte önem taşıyan zayıf bir işarettir.

GR-REPO-003+5

Dosyalar GitHub'ın indirme arşivinden çıkarılmış

Bir .gitattributes export-ignore kuralı bu dosyaları GitHub'ın verdiği arşivin dışında tutar ama "git clone" onları yine getirir. Paketler bunu çoğunlukla testleri çıkarmak için kullanır; ama arşivi okuyan tarayıcılardan bir yükü saklamanın da yoludur. GiTRay bu dosyaları ayrıca indirip diğerleri gibi tarar.

CI iş akışları

GR-CI-001+5

CI ayarı indirileni doğrudan kabuğa veriyor

CI ayarı bir script indirip derleme sunucusunda çalıştırıyor (GitHub Actions, GitLab CI, Azure Pipelines, ...). Orası repoyu klonlayan kişinin bilgisayarı değildir, o yüzden az puan alır; yine de o adresi kim kontrol ediyorsa derlemeyi de o kontrol eder.

dosyalar: .github/workflows/*.yml, .github/workflows/*.yaml, .gitlab-ci.yml, .gitlab/ci/*.yml, .travis.yml, .circleci/*.yml, appveyor.yml, .appveyor.yml, bitbucket-pipelines.yml, .drone.yml, .woodpecker.yml, .woodpecker/*.yml, .buildkite/*.yml, cloudbuild.yaml, cloudbuild.yml, codemagic.yaml, Jenkinsfile, azure-pipelines*.yml, azure-pipelines/*.yml, azure-pipelines/*/*.yml, azure-pipelines/*/*/*.yml, .azure-pipelines/*.yml, .pipelines/*.yml