Donör profilleri ve gölge yapılandırma alanı
Donör kimliğinin register düzeyinde nelerden oluştuğu: vendor ve device ID, subsystem ID, BAR boyutları ve capability listesi. Ve inandırıcı bir donörün jenerik olandan neden iyi olduğu.
Kısa cevap
Donör profili, gerçek bir PCIe aygıtının kimliğidir. Kartınız bu kimliği gölge yapılandırma alanına yazar ve host'a onu gösterir. İçinde vendor ID, device ID, subsystem ID'ler, BAR yerleşimi ve capability listesi durur. İnandırıcı bir donör sıradan donanım gibi okunur. Jenerik olan ya da aynı anda birçok kartta duran bir donör ise aygıtları listeleyen herkesin görebileceği bir örüntüdür.
Bu sayfada10
- Yapılandırma alanı, karta ilk sorulan şey
- Gölge yapılandırma alanı ve neden yazılabilir olduğu
- Alanlar ve her birinin bakana ne söylediği
- İnandırıcı olan, egzotik olanı neden yener
- Bir donörü inandırıcı yapan şeyler
- Tek donörde iki kişi olmak, ikisinin de sıradan birer donörü olmasından neden kötü
- Bir donör profilinin yapmadıkları
- Bir profil satın almadan önce sorulmaya değer sorular
- Donör soruları
- Kaynaklar
Yapılandırma alanı, karta ilk sorulan şey
Her PCIe aygıtında yapılandırma alanı (configuration space) denen küçük bir register bloğu bulunur. Host aygıtları listelerken bu bloğu okur ve üç sorunun cevabını alır: kimsin, hangi aygıt sınıfındansın ve ne kadar adres alanı istiyorsun. Windows sürücüyü bu cevaplara göre seçer. Aynı registerları o makinede çalışan başka her şey de okuyabilir. Cevapları veren, kartınızın firmware'i. Yani yapılandırma alanı, içeriğini bilerek seçmiş olun ya da olmayın, kartın herkese açık kimliğidir.
Gölge yapılandırma alanı ve neden yazılabilir olduğu
Standart bir FPGA tasarımında PCIe donanım bloğu, yapılandırma okumalarına sentez sırasında sabitlenmiş değerlerle cevap verir. DMA firmware'i bunun önüne blok bellekte (BRAM) yazılabilir 4 KB'lık bir katman koyar — gölge yapılandırma alanı (shadow configuration space) — ve cevapları oradan verir. Açık pcileech-fpga soyunda bu katman, bitstream'in içine derlenen bir coefficient dosyasında durur. Böylece kartın kimliği silikon değil, veri hâline gelir. Firmware'in yeni donanım olmadan başka bir donöre göre yeniden derlenebilmesinin sebebi tam olarak budur.
Alanlar ve her birinin bakana ne söylediği
Offset'ler aygıtın yapılandırma alanının başından sayılıyor. Asıl önemli olan son sütun: orada alanın ne işe yaradığı değil, onu okuyanın ne öğrendiği yazıyor.
| Offset | Alan | Ne tutuyor | Bakana ne söylüyor |
|---|---|---|---|
| 0x00 | Vendor ID | PCI-SIG'in üreticiye verdiği 16 bitlik kod | Bunu iddiaya göre hangi şirketin ürettiği. Hiç tahsis edilmemiş bir değer ya da ağ kartı olduğunu söyleyen bir kartta bilinen bir FPGA üreticisi, anında çelişkidir |
| 0x02 | Device ID | Üreticinin belirli bir ürüne verdiği 16 bitlik kod | Kartın tam olarak hangi ürün olduğunu iddia ettiği. Vendor ID ile birlikte, ya var olan ya da hiç olmamış gerçek bir parçayı işaret eder |
| 0x08 | Revision ID | O parçanın silikon revizyonu | Bu device ID ile böyle bir revizyonun hiç çıkıp çıkmadığı. Hiçbir üründe kullanılmamış bir revizyon, tek başına uyumsuzluktur |
| 0x09-0x0B | Class code | Temel sınıf, alt sınıf ve programlama arayüzü | Aygıtın hangi kategoriye girdiği. Class code ile device ID'yi karşılaştırmak, herkesin yapabileceği en ucuz kontrollerden biridir |
| 0x10-0x27 | BAR0-BAR5 | Base address registers: aygıt kaç bölge istiyor, hangi boyutta, bellek mi I/O mu, prefetchable mı değil mi | Gerçek parçanın isteyeceği bellek alanı. Donörün BAR0'ı 4 KB iken firmware başka bir şey istiyorsa kart, olduğunu söylediği parçayla artık örtüşmüyordur |
| 0x2C | Subsystem Vendor ID | Yongayı taşıyan kartı kimin ürettiği | Kartın referans tasarım mı yoksa belirli bir OEM üretimi mi olduğu. Yonga üreticisinin kendi donanımında çoğu zaman vendor ID ile aynıdır |
| 0x2E | Subsystem ID | O üreticinin hangi kart varyantı olduğu | Kötü firmware'de en sık atlanan alan. Gerçek bir yongada boş ya da anlamsız bir subsystem çifti, tek başına güçlü bir sinyaldir |
| 0x34 | Capabilities pointer | Capability bağlı listesindeki ilk kaydın offset'i | Aygıtın capability'si olup olmadığı. Hiçbir yere işaret etmeyen bir pointer, sıradan donanımda görülmeyecek biçimde bozuktur |
| 0x40+ | Capability listesi | Bağlı liste: güç yönetimi, MSI ya da MSI-X, PCI Express capability'sinin kendisi, üreticiye özel kayıtlar | Parçanın hangi özellikleri desteklediği. Gerçek aygıtın listesinde belirli kayıtlar belirli bir sırada durur; kısa ya da sırası bozulmuş bir liste örtüşmez |
| 0x100+ | Genişletilmiş capability'ler | PCIe genişletilmiş alanı: gelişmiş hata raporlama, L1 güç alt durumları, aygıt seri numarası | Çoğu kişinin hiç doldurmadığı, ikinci ve daha geniş bir yüzey. Gerçek parçanın kayıt bildirdiği yerdeki sessizlik de başlı başına bir farktır |
| Ext cap 0x0003 | Device Serial Number | Tek bir fiziksel aygıtı benzersiz biçimde tanımlayan 64 bitlik salt okunur seri numarası | Kartın parmak izini tek başına veren bir değer. İki kart aynı numarayı bildiriyorsa aynı profilde oldukları kanıtlanmış olur |
Bu satırların hiçbiri tek başına bir tespit yöntemi değil. Bunlar, bakan birinin bedavaya okuyabildiği alanlar. Bir profil ancak en tutarsız alanı kadar iyidir.
İnandırıcı olan, egzotik olanı neden yener
Firmware arayanlar sık sık mümkün olan en nadir donörü istiyor; kimsenin görmediği bir şeyi kimsenin tanımayacağını düşünüyorlar. Bu mantık ters işliyor. Kimsenin görmediği bir aygıt ilgi çekicidir ve ilgi çekici olmak, istediğinizin tam tersi. Amaç, tam olarak sizin makinenizde göze batmayacak bir parça. Yayın yapan bir makineye yakalama kartı yakışır. İkinci bir ağı olan makineye ağ kartı yakışır. Boş yuvası olan makineye depolama yakışır. Aygıt listesine bakan birinin ikinci kez bakmak için sebebi yoksa donör inandırıcıdır.
Bir donörü inandırıcı yapan şeyler
Beş madde, kabaca en sık yanlış yapılandan başlayarak. Beşi de donörün gerçek bir parça olmasından ve eksiksiz kopyalanmasından geliyor.
- Kendi içinde tutarlı
- Vendor, device, revision, class code ve subsystem çifti aynı ve gerçekten satılmış ürünü tarif ediyor
- Eksiksiz
- BAR boyutları ve capability listesi bir şablonun varsayılanı değil, gerçek parçanın kendisi
- Bağlama uygun
- Bu tip bir makineye, bu tip bir yuvaya yakışan cinsten bir kart
- Paylaşılmamış
- Aynı profil çok sayıda başka kartta çalışmıyor
- Hâlâ üretimde
- Yıllar önce hayattan çekilmiş değil, piyasada hâlâ var olan bir parça
Uyarı
Tek donörde iki kişi olmak, ikisinin de sıradan birer donörü olmasından neden kötü
Bir donör profili ancak öbürlerinden ayrıştığı ölçüde parmak izidir. Çok sayıda kartta aynı anda duran bir profil ise çok kolay ayrışır. Tek bir alan yanlış göründüğü için değil, alanların tam olarak bu bileşimi tekrar ettiği için. Bir bileşim herhangi bir şeye bağlandığı anda, onu taşıyan her kart o bağı miras alır. Hiçbir şey yapmamış kartlar da dâhil. Sıradan, düzgün kopyalanmış ve tek nüsha bir profil, bir partiyle paylaşılan nadir bir profilden daha kötü bir hedeftir. Birincisi binlerce gerçek aygıttan biridir. İkincisi ise üyeleri bilinen bir kümedir.
Uyarı
Bir donör profilinin yapmadıkları
Kartın kimliğinin PCIe katmanında nasıl okunduğunu değiştirir. Geri kalan açığınıza dokunmaz. Buna yazılımın nasıl davrandığı ve giriş cihazının imleci nasıl hareket ettirdiği dâhildir. Ekran yolu, hesabın kendi geçmişi ve bir raporu inceleyen insanın gördükleri de dâhildir. Firmware kalitesi, fark edilmenin belirli bir yolunu ortadan kaldırır. Güvenlik değildir. Burada kimse size güvenlik sunamaz; aksini söyleyen satıcı, duymak istediğiniz şeyi söylüyordur.
Bir profil satın almadan önce sorulmaya değer sorular
Bu soruların cevabı size hiçbir seviye adının söylemeyeceği kadar çok şey söyler.
- Donör gerçekten satılmış bir parça mı, yoksa elle düzenlenmiş bir değerler kümesi mi?
- Şu anda aynı profili kaç kart daha çalıştırıyor?
- BAR boyutları ve capability listesi donörden mi kopyalandı, yoksa şablon varsayılanlarında mı bırakıldı?
- Subsystem çifti dolu mu, yoksa sıfırlanmış mı?
- Profil gireceği makineye uygun mu, yoksa sadece alışılmadık mı?
- Profil bir şeyle ilişkilendirilirse ne oluyor — yeniden derleme yolu var mı?
Donör soruları
Kendi donör aygıtımı verebilir miyim?
İki yönde de bir varsayımda bulunmadan önce desteğe sorun. Bir donörün yapılandırma alanını okumak için fiziksel kart ve onu okuyacak bir makine gerekiyor. İşe yarayan şey, bir ilandan alınmış üç değer değil, eksiksiz ve doğru bir döküm.
Donörün gerçekten sahip olduğum bir donanımla eşleşmesi gerekiyor mu?
Hayır ve genelde eşleşmiyor da. Gereken tek şey, sizinki gibi bir makinede şaşırtıcı durmayacak bir parça olması. Gerçek aygıta sahip olmanız, kartın nasıl okunduğuna dair hiçbir şeyi değiştirmez.
Nadir bir donör yaygın olandan daha mı iyi?
Tek başına değil. En kötü bileşim nadir ve paylaşılmış olanı. Yaygın ve düzgün kopyalanmış olan makul bir bileşim. Tek nüsha olan ise sipariş başına donör veren seviyelerin var oluş sebebi.
Yapılandırma alanı yeniden yazma olmadan değiştirilebilir mi?
Hayır. Gölge alan bitstream'in içine derleniyor, yani farklı bir profil farklı bir imaj ve yeni bir yazma işlemi demek. Profil değişikliğinin bir ayar düğmesi değil, yeniden derleme talebi olmasının sebebi de bu.
İyi bir donör profili kurulumumun güvende olduğu anlamına mı geliyor?
Hayır. Tek bir açığı ele alıyor: kartın PCIe katmanındaki kimliğini. Yazılımın davranışı, giriş, ekran yolu ve hesap geçmişi bundan etkilenmiyor.
Kaynaklar
Bir donörü inandırıcı yapan şey bizim kendi değerlendirmemiz. Aynı anda çok sayıda kartta duran bir profilin, yaygın bir aygıtın profilinden kötü olduğu savı da öyle.
- 01PCI configuration space (overview)
başlık yapısı ve vendor ID, device ID, BAR, subsystem ID ile capability listesinin offset'leri
en.wikipedia.org
- 02pcileech-fpga (Ulf Frisk)
sayfada adı geçen açık gateware soyu: gölge yapılandırma alanı orada bitstream'in içine derleniyor
github.com
Sırada ne var
Hâlâ takıldınız mı? Discord'da destek talebi açın
Tüm rehberler