抽象UNIXソケットの名前が「\ 0some random secret」の場合、ブルートフォースを使用する以外に、抽象ソケットの名前空間から推測または取得できますか?
ファイルシステムのアクセス制御の対象となる通常のUNIXソケットと比較して、セキュリティ関連の欠点はありますか?
それは安全ではありません。 ss -xa
を使用してソケットを列挙できます。自分のものではないプロセスのソケットも列挙できます。テストするには、これを実行します。
#include <stddef.h>
#include <sys/socket.h>
#include <sys/un.h>
int main(void) {
struct sockaddr_un addr = {
.Sun_family = AF_UNIX,
.Sun_path = "\0some random secret"
};
int sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
bind(sockfd, &addr, offsetof(struct sockaddr_un, Sun_path) + 19);
listen(sockfd, 50);
accept(sockfd, NULL, NULL);
return 0;
}
次に、別のユーザーとしてss -xa
を実行すると、出力にu_str LISTEN 0 50 @some random secret 12979431 * 0
のようなエントリが表示されます。