Faits :
A.
Le 19 janvier 2017, le Ministère public du canton de Genève a ouvert une instruction pour gestion déloyale, sur dénonciation de l'Association B._ (B._, dont le siège est à Genève). Celle-ci reprochait notamment à certains de ses responsables d'avoir détourné 150'000'000 fr. de rétrocessions et commissions versées secrètement par des assureurs, provenant de primes pour des assurances comprises dans les carnets de transit international routier (TIR). Le 4 avril 2017, Association A._ (soit A._), membre de B._, a déposé plainte avec constitution de partie plaignante notamment pour escroquerie et gestion déloyale contre les responsables de B._. Lors d'une audience d'instruction du 18 juillet 2017 le Ministère public a refusé la présence du conseil de A._, expliquant le 21 juillet suivant qu'il n'y avait pas encore de mise en prévention. Dans une seconde décision du 31 août 2017, le Ministère public a refusé d'admettre la qualité de partie plaignante de A._, considérant que seule B._ était directement lésée par les agissements dénoncés.
B.
Par arrêt du 29 novembre 2017, la Chambre pénale de recours de la Cour de justice du canton de Genève a rejeté les recours formés par A._ contre les décisions des 18 juillet et 31 août 2017. Les rétrocessions versées à B._ avaient certes eu des répercussions sur les primes d'assurances, mais cela ne constituait pas un dommage direct. Les primes versées par le biais des carnets TIR étaient en définitive supportées par les entreprises de transport. A défaut d'être partie plaignante, la recourante - ou son conseil - ne pouvait participer à l'audience du 18 juillet 2017.
C.
Agissant par la voie du recours en matière pénale, A._ demande au Tribunal fédéral d'annuler l'arrêt cantonal ainsi que la décision du Ministère public du 31 août 2017 et de lui reconnaître la qualité de partie plaignante, subsidiairement de renvoyer la cause à la cour cantonale pour nouvelle décision dans le sens des considérants. Préalablement, elle demande l'accès au dossier de la procédure en mains du Tribunal fédéral, ainsi que le droit de déposer de nouvelles déterminations, requête qui a été écartée par ordonnance du 19 janvier 2018.
La Chambre pénale de recours se réfère à son arrêt, sans observations. Le Ministère public conclut au rejet du recours dans la mesure où il est recevable, en se référant à l'arrêt attaqué. Dans ses dernières observations, la recourante persiste dans ses conclusions.

Considérant en droit :
1.
La décision attaquée a été rendue dans le cadre d'une procédure pénale par une juridiction cantonale statuant en dernière instance (art. 80 LTF) et peut donc faire l'objet d'un recours en matière pénale au sens de l'art. 78 al. 1 LTF. La recourante, qui se voit notamment dénier la qualité de partie plaignante, a pris part à la procédure devant l'autorité précédente et a un intérêt juridique à l'annulation ou à la réforme de la décision attaquée (art. 81 LTF; <ref-ruling> consid. 1 p. 4 s. et les références). La question de savoir si elle conserve un intérêt actuel à ce qu'il soit statué sur son droit à être représentée par son conseil durant l'audience du 18 juillet 2017 peut demeurer indécise, vu l'issue de la cause.
Selon la jurisprudence, une décision qui rejette une demande de constitution de partie plaignante dans le procès pénal, respectivement retire cette qualité, présente, pour la partie concernée qui se trouve définitivement écartée de la procédure, les traits d'une décision finale au sens de l'art. 90 LTF (<ref-ruling> consid. 1 p. 312). Le recours en matière pénale, déposé en temps utile, est dès lors recevable.
2.
Se plaignant d'une violation de l'art. 115 CPP, la recourante relève qu'elle a déposé plainte pour escroquerie et abus de pouvoir de représentation, estimant que les rétrocessions cachées auraient entraîné une augmentation artificielle des primes d'assurances dont elle devait elle-même s'acquitter, soit directement, soit par le biais des carnets TIR. Le patrimoine de la recourante aurait ainsi été directement atteint par ces agissements, quand bien même les polices d'assurances étaient négociées par B._. Compte tenu du mécanisme mis en place, l'on ne pourrait soutenir, comme l'a fait le Ministère public, que B._ était l'unique lésée. Contrairement à ce que retient la cour cantonale, la recourante n'aurait pas refacturé l'entier des primes aux transporteurs routiers, dès lors notamment qu'elle paie directement l'une des assurances.
2.1. Selon l'art. 118 CPP, on entend par partie plaignante le lésé qui déclare expressément vouloir participer à la procédure pénale comme demandeur au pénal ou au civil. La notion de lésé est définie à l'art. 115 CPP; il s'agit de toute personne dont les droits ont été touchés directement par une infraction (al. 1); sont aussi considérées comme des lésés les personnes qui ont qualité pour déposer plainte pénale (al. 2). En règle générale, seul peut se prévaloir d'une atteinte directe le titulaire du bien juridique protégé par la disposition pénale qui a été enfreinte. Les droits touchés sont les biens juridiques individuels tels que la vie et l'intégrité corporelle, la propriété, l'honneur, etc. (<ref-ruling> consid. 3.1 p. 5). Celui qui prétend à la qualité de partie plaignante doit rendre vraisemblable le préjudice subi et doit en outre démontrer le rapport de causalité entre son dommage et l'infraction poursuivie (<ref-ruling> consid. 3.1 p. 6). La jurisprudence a de plus précisé que, lors d'infractions contre le patrimoine, le propriétaire des valeurs patrimoniales lésées est considéré comme la personne lésée. Il en résulte notamment que, lorsqu'une infraction est perpétrée au détriment du patrimoine d'une personne morale, seule celle-ci subit un dommage et peut donc prétendre à la qualité de lésé, à l'exclusion des actionnaires d'une société anonyme, des associés d'une société à responsabilité limitée, des ayants droit économiques et des créanciers desdites sociétés (<ref-ruling> consid. 2.3.3 p. 386; <ref-ruling> consid. 3.3.1 p. 158; arrêts 1B_372/2016 du 17 janvier 2017 consid. 3.1; 6B_1315/2015 du 9 août 2016 consid. 1.2.1 et les arrêts cités).
2.2. En l'occurrence, la plainte déposée par B._ porte sur une infraction de gestion déloyale commise par certains de ses responsables qui auraient obtenu des rétrocessions de la part des assureurs et en auraient détourné les montants. Ainsi présentées, ces malversations ont été commises au détriment de l'Association B._ qui en est la seule victime directe, conformément à la jurisprudence précitée. L'instruction a été ouverte le 19 janvier 2017 du seul chef de cette infraction. La plainte de la recourante porte, outre sur la gestion déloyale dont elle n'est pas directement victime, sur des infractions distinctes, soit notamment l'escroquerie et l'abus de représentation. Dans ce contexte, ce ne sont pas les détournements au préjudice de B._ qui sont visés, mais la surfacturation des primes d'assurances qu'elle a payées. Il n'est certes pas exclu que la recourante soit directement lésée dans ce contexte, et que sa plainte puisse ainsi donner lieu à l'ouverture d'une instruction de ce chef. Tel n'est toutefois pas l'objet de la procédure dans laquelle elle entend intervenir, qui concerne des faits différents et des parties distinctes. C'est dès lors à juste titre que la qualité de partie plaignante lui a été déniée dans ce cadre.
2.3. Comme le relève la recourante, le refus de participation de son avocat à l'audience du 18 juillet 2017 a été confirmé par la cour cantonale, par substitution de motifs, en raison du fait que la qualité de partie plaignante lui a été refusée. Cette appréciation étant confirmée, la question n'a plus à être tranchée.
3.
Sur le vu de ce qui précède, le recours doit être rejeté dans la mesure où il est recevable. Conformément à l'art. 66 al. 1 LTF, les frais judiciaires sont mis à la charge de la recourante, qui succombe.

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de la recourante.
3.
Le présent arrêt est communiqué aux mandataires de la recourante, au Ministère public et à la Cour de justice de la République et canton de Genève, Chambre pénale de recours.
Lausanne, le 19 avril 2018
Au nom de la Ire Cour de droit public
du Tribunal fédéral suisse
Le Président : Merkli
Le Greffier : Kurz